Heim >Backend-Entwicklung >C++ >Wie implementieren und beheben Sie mehrere Serviceimplementierungen mit unterschiedlichen Schlüssel in ASP.NET Core?

Wie implementieren und beheben Sie mehrere Serviceimplementierungen mit unterschiedlichen Schlüssel in ASP.NET Core?

DDD
DDDOriginal
2025-01-29 21:26:10937Durchsuche

How to Implement and Resolve Multiple Service Implementations with Different Keys in ASP.NET Core?

Mehrere Dienste zur Implementierung mehrerer Dienste in ASP.NET Core

In ASP.NET Core begegnen mehrere Dienste häufig auf dieselbe Schnittstelle. Um diese Situation effektiv zu bewältigen, müssen wir verstehen, wie diese Dienste registriert werden können und wie die Unterscheidungsbescheid verwendet werden, um sie während der Laufzeit zu beheben.

Service Registrierung

In ASP.NET Core können Sie den Dienst in der -Methode der Startklasse registrieren. Normalerweise haben wir Dienste wie folgt registriert:

ConfigureServices Diese Methode kann jedoch nicht zwischen verschiedenen Diensten unterscheiden, was unsere Fähigkeit einschränkt, sie in Zukunft zu analysieren.

<code class="language-csharp">services.AddTransient<IService, ServiceA>();
services.AddTransient<IService, ServiceB>();</code>
Verwenden Sie den Schlüssel, um

zu analysieren

Um den Dienst basierend auf dem Schlüssel zu beheben, benötigen wir einen Mechanismus, um den Schlüssel zur Service -Implementierung abzubilden. Dies kann mit Provision implementiert werden:

Wir können diese Kommission als vorübergehender Dienst registrieren und der Service -Implementierung zuordnen:

<code class="language-csharp">public delegate IService ServiceResolver(string key);</code>
abhängige Injektion im Konstruktor

<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>
Obwohl die obige Methode gültig ist, hindert es uns daran, statische Daten während des Registrierungszeitraums in den Konstruktor in die Injektion zu bringen. Um diese Grenze zu überwinden, können wir den

-Modus verwenden, der eine Methode zum Einfügen von Einstellungen bietet:

Dann können wir im Service Constructor auf diese Optionen zugreifen:

IOptions

Schlussfolgerung
<code class="language-csharp">services.Configure<ServiceAOptions>(options =>
{
    options.ConnectionString = "connectionStringA";
});</code>

Durch die Verwendung des Provision und des
<code class="language-csharp">public ServiceA(IOptions<ServiceAOptions> options)
{
    _connectionString = options.Value.ConnectionString;
}</code>
-Modus können wir mehrere Dienste in ASP.NET Core effektiv registrieren und analysieren und gleichzeitig können wir auch Konstruktorinjektion für statische Daten injizieren. Diese Methode bietet eine flexible und wartbare Lösung für die komplexen Abhängigkeitselemente.

Das obige ist der detaillierte Inhalt vonWie implementieren und beheben Sie mehrere Serviceimplementierungen mit unterschiedlichen Schlüssel in ASP.NET Core?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn