Heim >Backend-Entwicklung >C++ >Wie kann ich Dienste in ASP.NET Core DI über die IServiceCollection hinaus auflösen?
ASP.NET Core Dependency Injection: Zugriff auf Dienste außerhalb von IServiceCollection
In ASP.NET Core ist IServiceCollection
entscheidend für die Registrierung von Abhängigkeiten innerhalb des Dependency-Injection-Systems (DI). Es kann jedoch vorkommen, dass Sie Dienste direkt und unter Umgehung der Standardinjektion lösen müssen.
Direkter Zugriff auf Dienste über IServiceCollection
Das IServiceCollection
selbst bietet keine Servicelösung; Sein Zweck besteht ausschließlich in der Konfiguration des DI-Containers. Nach der Konfiguration wird dieser Container in einen IServiceProvider
.
Injizieren des ServiceProviders
Zur manuellen Servicelösung fügen Sie IServiceProvider
in Ihre Klasse ein. Sowohl IApplicationBuilder
als auch HttpContext
bieten Zugriff über ihre Eigenschaften ApplicationServices
bzw. RequestServices
.
Nutzung des ServiceProviders
Die IServiceProvider
Angebote GetService(Type type)
zum Abruf von Diensten je nach Typ. Verwenden Sie der Einfachheit halber Erweiterungsmethoden wie GetService<TService>()
(erfordert using Microsoft.Extensions.DependencyInjection;
).
Servicelösung innerhalb der Startup-Klasse
Abhängigkeitsinjektion im Startup
Die Startup
-Klasse kann in ihren Konstruktor eingefügte Abhängigkeiten akzeptieren, z. B. IConfiguration
und IWebHostEnvironment
(oder IHostingEnvironment
in Versionen vor 3.0).
Innerhalb von ConfigureServices()
nutzen Sie diese injizierten Dienste, um weitere Abhängigkeiten zu registrieren.
Manuelle Abhängigkeitsauflösung beim Start
Um Dienste innerhalb ConfigureServices()
aufzulösen, erstellen Sie ein Zwischenprodukt IServiceProvider
aus dem IServiceCollection
. Dies ermöglicht den Zugriff auf bis zu diesem Zeitpunkt registrierte Dienste.
Nutzung von ApplicationServices
In der Methode Configure()
lösen Sie Dienste mit IApplicationBuilder.ApplicationServices
auf. Dadurch wird auf für die Anwendung konfigurierte Dienste zugegriffen.
Vermeidung des Service Locator Anti-Pattern
Von einer direkten Servicelösung wird im Allgemeinen abgeraten, da sie das „Service Locator“-Anti-Pattern darstellt. Auch wenn dies manchmal notwendig ist, sollte es nach Möglichkeit zugunsten der Konstruktorinjektion vermieden werden.
Das obige ist der detaillierte Inhalt vonWie kann ich Dienste in ASP.NET Core DI über die IServiceCollection hinaus auflösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!