ASP.NETコアに複数のインターフェイスを登録して、
ASP.NETコアでは、明示的なキーベースの登録がないため、同じインターフェイスを達成するために複数のサービスを登録すると課題が生じます。以下は、この問題を解決し、工場モデルの欠点を回避するために使用される包括的なソリューションです。
特定の実装を実装するために登録登録インターフェイスの複数の実装、
メソッドを複数回使用して、さまざまなタイプを使用してください。
カスタムサービスパーサー
というカスタム委員会を作成すると、文字列キーを受け取り、対応するサービスの例を返します。
AddTransient
メソッドでは、カスタムパーサーを登録します:<code class="language-csharp">services.AddTransient<ServiceA>();
services.AddTransient<ServiceB>();
services.AddTransient<ServiceC>();</code>
ログイン後にコピー
ユーザーに依存して注入するよう
ユーザーにServiceResolver
インジェクトを挿入して、特定のサービスを分析できるようにしてください。
<code class="language-csharp">public delegate IService ServiceResolver(string key);</code>
ログイン後にコピー
静的データを使用してコンストラクターを挿入して注入しますConfigureServices
登録期間中に静的データをコンストラクターに挿入するには、サービスインスタンスを返す方法を定義し、必要なデータをパラメーターとして受け入れる方法を定義してください。
<code class="language-csharp">services.AddTransient<ServiceResolver>(serviceProvider => key =>
{
switch (key)
{
case "A":
return serviceProvider.GetService<ServiceA>();
case "B":
return serviceProvider.GetService<ServiceB>();
case "C":
return serviceProvider.GetService<ServiceC>();
default:
throw new KeyNotFoundException();
}
});</code>
ログイン後にコピー
ファクトリーを単一のケースとして登録して、アプリケーションのライフサイクル全体で利用可能であることを確認してください。
メソッドでは、サービスタイプは工場メソッドにバインドされています:
この方法を通じて、インターフェイスの複数の実装をシームレスに登録および解決し、コンストラクターに静的データを注入し、工場モードの欠点を避け、ASP.NETコアの依存噴射の原理を順守することができます。 ServiceResolver
以上がASP.NETコアで複数のインターフェイス実装を登録および解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。