asp.netコアの複数のインターフェイスを登録および分析して、
同じインターフェイスサービスを使用する場合、それらは一意のキー登録と分析に基づいた課題になる可能性があります。特定の実装を区別できる他のIOCコンテナとは異なり、ASP.NETコアのデフォルトのDIシステムは、この点で制限されているようです。
ソリューション:funcを使用してこの制限を克服するために、
タイプ共有委員会を可変パススキームとして使用することで達成できます。
ファイルで、登録されている過渡サービスとタイプマッピングを使用してください:ServiceResolver
<code class="language-csharp">public delegate IService ServiceResolver(string key);</code>
を使用して必要なサービスを取得できます。
Startup.cs
ServiceResolver
注:
<code class="language-csharp">services.AddTransient<ServiceA>(); services.AddTransient<ServiceB>(); services.AddTransient<ServiceC>(); 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>
その他の予防策ServiceResolver
<code class="language-csharp">public class Consumer { private readonly IService _aService; public Consumer(ServiceResolver serviceAccessor) { _aService = serviceAccessor("A"); } public void UseServiceA() { _aService.DoTheThing(); } }</code>
このソリューションには、適切に維持されていない場合は、簡単にすることができます。
登録期間中に静的データをコンストラクターに注入する問題は解決しません。このため、オプションモードまたは他のテクノロジーの使用を検討してください。
以上がASP.NETコア依存関係インジェクションの一意のキーを使用して、複数のインターフェイスの実装を登録および解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。