Heim >Backend-Entwicklung >C++ >Wie kann ich Dienste innerhalb der „ConfigureServices'-Methode von ASP.NET Core manuell auflösen?
Lösen Sie den Dienst manuell in der ConfigureServices
-Methode von ASP.NET Core
ASP.NET Core verwendet die IServiceCollection
-Schnittstelle, um einen Abhängigkeitsinjektionscontainer (DI) zu erstellen. Nach der Erstellung wird es zu einer IServiceProvider
-Instanz zusammengesetzt, mit der Sie Dienste auflösen können. In diesem Artikel erfahren Sie, wie Sie Instanzen in der Methode ConfigureServices
manuell analysieren.
Abhängigkeiten einfügen
DieConfigureServices
-Methode erlaubt keine Dienstinjektion, sodass Sie Dienste in den Konstruktor der Startup
-Klasse injizieren können, wie z. B. IConfiguration
, IWebHostEnvironment
und ILoggerFactory
.
<code class="language-csharp">public Startup(IConfiguration configuration) => Configuration = configuration; public void ConfigureServices(IServiceCollection services) => services.AddScoped<IFooService>();</code>
Abhängigkeiten manuell auflösen in Configure()
Sie können den Dienst in der Methode IApplicationBuilder
mithilfe des ApplicationServices
-Attributs von Configure()
manuell auflösen:
<code class="language-csharp">public void Configure(IApplicationBuilder app) { var serviceProvider = app.ApplicationServices; var fooService = serviceProvider.GetService<IFooService>(); }</code>
Abhängigkeiten manuell auflösen in ConfigureServices()
Um Dienste in ConfigureServices
aufzulösen, verwenden Sie BuildServiceProvider()
, um ein Zwischenprodukt IServiceProvider
zu erstellen, um auf die bis zu diesem Zeitpunkt registrierten Dienste zuzugreifen:
<code class="language-csharp">public void ConfigureServices(IServiceCollection services) { services.AddSingleton<IFooService>(); var sp = services.BuildServiceProvider(); var fooService = sp.GetService<IFooService>(); }</code>
Warnung:
Vermeiden Sie die Lösung von Diensten in ConfigureServices
, da der Schwerpunkt auf der Konfiguration von Anwendungsdiensten liegen sollte. Erwägen Sie, den Wert von IConfiguration
manuell an die Instanz zu binden oder Überladungen von AddSingleton
/AddScoped
/AddTransient
zu verwenden, um die Instanz langsam zu erstellen.
Das manuelle Auflösen von Diensten (Dienst-Locators) ist ein Anti-Pattern und sollte mit Vorsicht verwendet werden.
Das obige ist der detaillierte Inhalt vonWie kann ich Dienste innerhalb der „ConfigureServices'-Methode von ASP.NET Core manuell auflösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!