Heim >Backend-Entwicklung >C++ >Wie kann ich Dienste innerhalb der „ConfigureServices'-Methode von ASP.NET Core manuell auflösen?

Wie kann ich Dienste innerhalb der „ConfigureServices'-Methode von ASP.NET Core manuell auflösen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-17 08:46:08370Durchsuche

How Can I Manually Resolve Services within ASP.NET Core's `ConfigureServices` Method?

Lösen Sie den Dienst manuell in der ConfigureServices-Methode von ASP.NET Core

auf

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

Die

ConfigureServices-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!

Stellungnahme:
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