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.
services.AddTransient<IService, ServiceA>();
services.AddTransient<IService, ServiceB>();
Nach dem Login kopieren
<> 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:
public delegate IService ServiceResolver(string key);
Nach dem Login kopieren
<> abhängige Injektion im Konstruktor
services.AddTransient<ServiceResolver>(serviceProvider => key =>
{
switch (key)
{
case "A":
return serviceProvider.GetService<ServiceA>();
case "B":
return serviceProvider.GetService<ServiceB>();
default:
throw new KeyNotFoundException();
}
});
Nach dem Login kopieren
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 services.Configure<ServiceAOptions>(options =>
{
options.ConnectionString = "connectionStringA";
});
Nach dem Login kopieren
Durch die Verwendung des Provision und des public ServiceA(IOptions<ServiceAOptions> options)
{
_connectionString = options.Value.ConnectionString;
}
Nach dem Login kopieren
-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!