ホームページ > バックエンド開発 > C++ > ASP.NETコアで複数のインターフェイス実装を登録および解決する方法は?

ASP.NETコアで複数のインターフェイス実装を登録および解決する方法は?

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

How to Register and Resolve Multiple Interface Implementations in ASP.NET Core?

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

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