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.