ホームページ >バックエンド開発 >C++ >ASP.NET Core の `ConfigureServices` メソッド内でサービスを手動で解決するにはどうすればよいですか?

ASP.NET Core の `ConfigureServices` メソッド内でサービスを手動で解決するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-17 08:46:08370ブラウズ

How Can I Manually Resolve Services within ASP.NET Core's `ConfigureServices` Method?

ASP.NET Core の ConfigureServices メソッドでサービスを手動で解決します

ASP.NET Core は、IServiceCollection インターフェイスを使用して依存関係注入 (DI) コンテナーを構築します。構築されると、サービスを解決できる IServiceProvider インスタンスに構成されます。この記事では、ConfigureServices メソッドでインスタンスを手動で解析する方法を説明します。

依存関係の挿入

ConfigureServices メソッドではサービス注入が許可されていないため、StartupIConfigurationIWebHostEnvironment などの ILoggerFactory クラスのコンストラクターにサービスを注入できます。

<code class="language-csharp">public Startup(IConfiguration configuration) => Configuration = configuration;

public void ConfigureServices(IServiceCollection services) => services.AddScoped<IFooService>();</code>

Configure()

の依存関係を手動で解決します

IApplicationBuilderApplicationServices 属性を使用して、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 サイトの他の関連記事を参照してください。

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