Hoe wordt de verwerking van meerdere gelijktijdige verzoeken uitgevoerd binnen de Scoped-eenprocescontext?
sobes.tech AI
Antwoord van AI
In een single-process context met Scoped-omgevingen voor afhankelijkheden in ASP.NET Core ontvangt elke HTTP-verzoek een eigen instantie van services met een Scoped-omgeving. Wanneer meerdere verzoeken gelijktijdig in hetzelfde proces worden uitgevoerd, wordt voor elk verzoek een aparte Scoped-container gemaakt, geïsoleerd van de anderen.
Dit wordt bereikt door het gebruik van het mechanisme van de DI-container, die aan het begin van het verzoek een nieuwe scope creëert en deze aan het einde vernietigt. Zo werkt zelfs in een single-process applicatie elk verzoek met zijn eigen set Scoped-services, wat dataconflicten tussen verzoeken voorkomt.
Zo ongeveer ziet dat eruit:
// In Startup.cs
services.AddScoped<IMyService, MyService>();
// Bij het verwerken van elk verzoek wordt een nieuwe scope gemaakt
app.Use(async (context, next) => {
using (var scope = app.ApplicationServices.CreateScope())
{
var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
// Gebruik van myService binnen het verzoek
await next();
}
});
In werkelijkheid maakt ASP.NET Core automatisch een scope voor elk HTTP-verzoek, dus ontwikkelaars hoeven dit meestal niet handmatig te doen.