[解決済み] ConfigureServices内部でIOptionsインスタンスを解決する方法は?
質問
のインスタンスを解決することは可能ですか?
IOptions<AppSettings>
から
ConfigureServices
メソッドを使用することができますか?
ドキュメントには、明示的に
:
を使用しないでください。
IOptions<TOptions>
またはIOptionsMonitor<TOptions>
でStartup.ConfigureServices.
サービス登録の順序により、一貫性のないオプション状態が存在する可能性があります。
サービスプロバイダを手動で作成するには
serviceCollection.BuildServiceProvider()
を使って手動で作成することもできますが、この場合、警告が発生します。
アプリケーションコードから 'BuildServiceProvider' を呼び出すと、シングルトンサービスのコピーが追加で作成される結果となります。Configure'のパラメータとしてサービスを依存性注入するなどの代替手段を検討してください。
どうすればこれを実現できますか?
public void ConfigureServices(IServiceCollection services)
{
services.Configure<AppSettings>(
configuration.GetConfigurationSection(nameof(AppSettings)));
// How can I resolve IOptions<AppSettings> here?
}
どのように解決するのですか?
サービスプロバイダを使用してサービスを手動で解決する必要がある場合、次のように使用できます。
AddSingleton/AddScoped/AddTransient
をオーバーロードすることができます。
// Works for AddScoped and AddTransient as well
services.AddSingleton<IBarService>(sp =>
{
var fooService = sp.GetRequiredService<IFooService>();
return new BarService(fooService);
}
もし、あなたが
本当に
を使い、中間サービスプロバイダを構築することができます。
BuildServiceProvider()
メソッドを使って中間サービスプロバイダを構築できます。
IServiceCollection
:
public void ConfigureService(IServiceCollection services)
{
// Configure the services
services.AddTransient<IFooService, FooServiceImpl>();
services.Configure<AppSettings>(configuration.GetSection(nameof(AppSettings)));
// Build an intermediate service provider
var sp = services.BuildServiceProvider();
// Resolve the services from the service provider
var fooService = sp.GetService<IFooService>();
var options = sp.GetService<IOptions<AppSettings>>();
}
には
Microsoft.Extensions.DependencyInjection
パッケージが必要です。
しかし の場合、複数のサービスプロバイダインスタンスになり、結果として複数のシングルトンインスタンスになる可能性があることに注意してください。
でいくつかのオプションをバインドする必要がある場合。
ConfigureServices
を使用することもできます。
Bind
メソッドを使用することもできます。
var appSettings = new AppSettings();
configuration.GetSection(nameof(AppSettings)).Bind(appSettings);
この機能は
Microsoft.Extensions.Configuration.Binder
パッケージで利用できます。
関連
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] 辞書を繰り返し使用するには?
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] 乱数(int)を生成する方法を教えてください。
-
[解決済み] ConfigureServices内からASP.NET Core DIでインスタンスを解決する
-
[解決済み】ConfigureServicesで開発/ステージング/本番のホスティング環境を取得する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み] ConfigureServices内からASP.NET Core DIでインスタンスを解決する