ホームページ > バックエンド開発 > C++ > ASP.NETコア依存関係インジェクションの一意のキーを使用して、複数のインターフェイスの実装を登録および解決するにはどうすればよいですか?

ASP.NETコア依存関係インジェクションの一意のキーを使用して、複数のインターフェイスの実装を登録および解決するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-29 21:31:09
オリジナル
384 人が閲覧しました

How Can I Register and Resolve Multiple Interface Implementations with Unique Keys in ASP.NET Core Dependency Injection?

asp.netコアの複数のインターフェイスを登録および分析して、

質問ステートメント

同じインターフェイスサービスを使用する場合、それらは一意のキー登録と分析に基づいた課題になる可能性があります。特定の実装を区別できる他のIOCコンテナとは異なり、ASP.NETコアのデフォルトのDIシステムは、この点で制限されているようです。

ソリューション:funcを使用してこの制限を克服するために、

タイプ共有委員会を可変パススキームとして使用することで達成できます。

ファイルで、登録されている過渡サービスとタイプマッピングを使用してください:ServiceResolver

<code class="language-csharp">public delegate IService ServiceResolver(string key);</code>
ログイン後にコピー
diが注入したクラスでは、

を使用して必要なサービスを取得できます。 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート