ASP.NET Core の ConfigureServices
メソッドでサービスを手動で解決します
ASP.NET Core は、IServiceCollection
インターフェイスを使用して依存関係注入 (DI) コンテナーを構築します。構築されると、サービスを解決できる IServiceProvider
インスタンスに構成されます。この記事では、ConfigureServices
メソッドでインスタンスを手動で解析する方法を説明します。
依存関係の挿入
ConfigureServices
メソッドではサービス注入が許可されていないため、Startup
、IConfiguration
、IWebHostEnvironment
などの ILoggerFactory
クラスのコンストラクターにサービスを注入できます。
<code class="language-csharp">public Startup(IConfiguration configuration) => Configuration = configuration; public void ConfigureServices(IServiceCollection services) => services.AddScoped<IFooService>();</code>
Configure()
IApplicationBuilder
の ApplicationServices
属性を使用して、Configure()
メソッドでサービスを手動で解決できます。
<code class="language-csharp">public void Configure(IApplicationBuilder app) { var serviceProvider = app.ApplicationServices; var fooService = serviceProvider.GetService<IFooService>(); }</code>
ConfigureServices()
ConfigureServices
のサービスを解決するには、BuildServiceProvider()
を使用して中間 IServiceProvider
を構築し、その時点までに登録されたサービスにアクセスします。
<code class="language-csharp">public void ConfigureServices(IServiceCollection services) { services.AddSingleton<IFooService>(); var sp = services.BuildServiceProvider(); var fooService = sp.GetService<IFooService>(); }</code>
警告:
ConfigureServices
でのサービスの解決は、アプリケーション サービスの構成に重点を置く必要があるため避けてください。 IConfiguration
の値をインスタンスに手動でバインドするか、AddSingleton
/AddScoped
/AddTransient
のオーバーロードを使用してインスタンスを遅延作成することを検討してください。
サービス (サービス ロケーター) を手動で解決することはアンチパターンであるため、注意して使用する必要があります。
以上がASP.NET Core の `ConfigureServices` メソッド内でサービスを手動で解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。