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);
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(); } });
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
public class Consumer { private readonly IService _aService; public Consumer(ServiceResolver serviceAccessor) { _aService = serviceAccessor("A"); } public void UseServiceA() { _aService.DoTheThing(); } }
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!