ASP.NET Coreに複数のサービスを実装する複数のサービス
ASP.NETコアでは、複数のサービスが同じインターフェイスに遭遇することがよくあります。この状況を効果的に処理するには、これらのサービスを登録する方法と、ランタイム中に区別識別子を使用する方法を理解する必要があります。
サービス登録
ASP.NET Coreでは、スタートアップクラスのメソッドでサービスを登録できます。通常、次のようなサービスを登録しました:
ただし、この方法は異なるサービスを区別することはできません。これにより、将来分析する能力が制限されます。 ConfigureServices
キーを使用して<code class="language-csharp">services.AddTransient<IService, ServiceA>();
services.AddTransient<IService, ServiceB>();</code>
を分析します
キーに基づいてサービスを解決するには、キーをサービスの実装にマッピングするメカニズムが必要です。これは、手数料を使用して実装できます:
この委員会を一時的なサービスとして登録し、サービスの実装にマッピングできます。
コンストラクターでの依存注射
<code class="language-csharp">public delegate IService ServiceResolver(string key);</code>
上記の方法は有効ですが、登録期間中にコンストラクターに静的データを注入することを防ぎます。この制限を克服するために、設定を注入する方法を提供するモードを使用できます。
<code class="language-csharp">services.AddTransient<ServiceResolver>(serviceProvider => key =>
{
switch (key)
{
case "A":
return serviceProvider.GetService<ServiceA>();
case "B":
return serviceProvider.GetService<ServiceB>();
default:
throw new KeyNotFoundException();
}
});</code>
サービスコンストラクターでこれらのオプションにアクセスできます。
結論
委員会とIOptions
モードを使用することにより、ASP.NETコアで複数のサービスを効果的に登録および分析することができ、同時に静的データにコンストラクターインジェクションを注入することもできます。この方法は、複雑な依存関係項目に柔軟で保守可能なソリューションを提供します。
以上がASP.NETコアの異なるキーを使用して複数のサービス実装を実装および解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。