Sobes.tech
Junior — Middle

Wie erfolgt die Verarbeitung mehrerer gleichzeitig ausgeführter Anfragen im Scoped-Einprozess-Kontext?

sobes.tech KI

Antwort von AI

In einem Single-Process-Kontext mit Scoped-Umgebung für Abhängigkeiten in ASP.NET Core erhält jede HTTP-Anfrage eine eigene Instanz von Diensten mit Scoped-Umgebung. Bei gleichzeitiger Ausführung mehrerer Anfragen in einem Prozess wird für jede Anfrage ein separater Scoped-Container erstellt, der von den anderen isoliert ist.

Dies wird durch den Mechanismus des DI-Containers erreicht, der zu Beginn der Anfrage einen neuen Scope erstellt und ihn am Ende zerstört. So arbeitet selbst in einer Single-Process-Anwendung jede Anfrage mit ihrem eigenen Satz von Scoped-Services, was Datenkonflikte zwischen Anfragen verhindert.

So ungefähr sieht das aus:

// In Startup.cs
services.AddScoped<IMyService, MyService>();

// Bei der Verarbeitung jeder Anfrage wird ein neuer Scope erstellt
app.Use(async (context, next) => {
    using (var scope = app.ApplicationServices.CreateScope())
    {
        var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
        // Verwendung von myService im Rahmen der Anfrage
        await next();
    }
});

In Wirklichkeit erstellt ASP.NET Core automatisch einen Scope für jede HTTP-Anfrage, sodass der Entwickler ihn normalerweise nicht manuell erstellen muss.