Sobes.tech
Junior — Middle

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.