Heim > Backend-Entwicklung > C++ > Wie kann ich mehrere Schnittstellenimplementierungen mit eindeutigen Schlüssel in der ASP.NET -Kern -Abhängigkeitsinjektion registrieren und beheben?

Wie kann ich mehrere Schnittstellenimplementierungen mit eindeutigen Schlüssel in der ASP.NET -Kern -Abhängigkeitsinjektion registrieren und beheben?

Susan Sarandon
Freigeben: 2025-01-29 21:31:09
Original
467 Leute haben es durchsucht

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

Registrieren und analysieren Sie mehrere Schnittstellen im ASP.NET -Kern, um

zu implementieren

Frage Anweisung

Bei Verwendung derselben Schnittstellendienste können sie eine Herausforderung sein, die auf der einzigartigen Schlüsselregistrierung und -analyse basiert. Im Gegensatz zu anderen IOC -Containern, die die spezifische Implementierung unterscheiden dürfen, scheint das Standard -DI -System von ASP.NET Core in dieser Hinsicht begrenzt zu sein.

Lösung: Verwenden Sie Func, um

in Auftrag zu geben Um diese Grenze zu überwinden, kann es durch die Verwendung der Type -Sharing -Kommission als Variable -Pass -Schema erreicht werden.

Verwenden Sie in der Datei den registrierten transienten Dienst ServiceResolver und geben Sie die Zuordnung ein:

public delegate IService ServiceResolver(string key);
Nach dem Login kopieren

In jeder von DI injizierten Klasse können Sie Startup.cs verwenden, um den erforderlichen Service zu erhalten: ServiceResolver

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();
    }
});
Nach dem Login kopieren
<:> Hinweis:

Diese Methode verwendet die Zeichenfolgeschlüssel, um den Zweck zu vereinfachen. Bei Bedarf können Sie jedoch einen beliebigen benutzerdefinierten Parsing -Typ als Schlüssel verwenden. ServiceResolver

<注意> Andere Vorsichtsmaßnahmen
public class Consumer
{
    private readonly IService _aService;

    public Consumer(ServiceResolver serviceAccessor)
    {
        _aService = serviceAccessor("A");
    }

    public void UseServiceA()
    {
        _aService.DoTheThing();
    }
}
Nach dem Login kopieren

Obwohl diese Lösung das Problem der wichtigsten Wetten und Analyse mehrerer Schnittstellenimplementierung löst, müssen die folgenden Punkte beachtet werden:

Diese Lösung beinhaltet eine manuelle Zuordnung. Es löst nicht das Problem, statische Daten in den Konstruktor während der Registrierungszeit zu injizieren. Erwägen Sie aus diesem Grund den Optionsmodus oder andere Technologien.

Das obige ist der detaillierte Inhalt vonWie kann ich mehrere Schnittstellenimplementierungen mit eindeutigen Schlüssel in der ASP.NET -Kern -Abhängigkeitsinjektion registrieren und beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage