Sobes.tech
Junior — Middle

Hogyan történik több egyidejű kérés feldolgozása a Scoped egyprocesszusos kontextusában?

sobes.tech MI

Válasz az MI-től

ASP.NET Core-ban, egy egyfolyamú kontextusban, Scoped függőségek esetén minden HTTP-kérés saját példányt kap a Scoped szolgáltatásokból. Amikor több kérés fut egyidejűleg ugyanabban a folyamatban, külön Scoped konténert hozunk létre minden kéréshez, amely elszigetelt a többitől.

Ez a DI-konténer mechanizmusával érhető el, amely új scope-ot hoz létre a kérés kezdetén, és a végén megsemmisíti. Így még egy egyfolyamú alkalmazásban is minden kérés saját Scoped szolgáltatáskészlettel dolgozik, megelőzve az adatok közötti konfliktusokat.

Kb. így néz ki:

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

// Minden kérés feldolgozásakor új scope jön létre
app.Use(async (context, next) => {
    using (var scope = app.ApplicationServices.CreateScope())
    {
        var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
        // MyService használata a kérés keretében
        await next();
    }
});

Valójában az ASP.NET Core automatikusan létrehoz egy scope-ot minden HTTP-kéréshez, így a fejlesztőnek általában nem kell kézzel létrehoznia.