ホームページ >バックエンド開発 >C++ >IServiceCollection を超えて ASP.NET Core DI のサービスを解決するにはどうすればよいですか?

IServiceCollection を超えて ASP.NET Core DI のサービスを解決するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-17 08:51:13729ブラウズ

How Can I Resolve Services in ASP.NET Core DI Beyond the IServiceCollection?

ASP.NET Core 依存関係の挿入: IServiceCollection 外部のサービスへのアクセス

ASP.NET Core では、IServiceCollection は依存関係注入 (DI) システム内に依存関係を登録するために重要です。 ただし、標準のインジェクションをバイパスして、サービスを直接解決する必要がある状況が発生する可能性があります。

IServiceCollection からサービスに直接アクセスする

IServiceCollection 自体はサービス解決を提供しません。その目的は、DI コンテナを構成することだけです。 構成が完了すると、このコンテナは IServiceProvider.

に変換されます。

ServiceProvider の挿入

手動でサービスを解決するには、IServiceProvider をクラスに挿入します。 IApplicationBuilderHttpContext は両方とも、それぞれ ApplicationServicesRequestServices プロパティを介してアクセスを提供します。

サービスプロバイダーの利用

IServiceProvider は、タイプに基づいてサービスを取得するための GetService(Type type) を提供します。 便宜上、GetService<TService>() のような拡張メソッドを使用します (using Microsoft.Extensions.DependencyInjection; が必要です)。

スタートアップ クラス内のサービス解決

起動時の依存関係の挿入

Startup クラスは、IConfigurationIWebHostEnvironment (または 3.0 より前のバージョンでは IHostingEnvironment) など、コンストラクターで挿入された依存関係を受け入れることができます。

ConfigureServices() 内で、これらの挿入されたサービスを利用して、さらに依存関係を登録します。

起動時の依存関係の手動解決

内でサービス ConfigureServices() を解決するには、IServiceProvider から中間 IServiceCollection を作成します。これにより、それまでに登録されたサービスにアクセスできるようになります。

ApplicationServices の活用

Configure() メソッドでは、IApplicationBuilder.ApplicationServices を使用してサービスを解決します。これにより、アプリケーション用に構成されたサービスにアクセスします。

サービス ロケーターのアンチパターンの回避

サービスの直接解決は、「Service Locator」アンチパターンに該当するため、一般的に推奨されません。必要な場合もありますが、コンストラクター インジェクションを優先して可能な限り回避する必要があります。

以上がIServiceCollection を超えて ASP.NET Core DI のサービスを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。