Sobes.tech
Junior — Middle

Kako se vrši obrada više istovremenih zahteva u okviru Scoped konteksta sa jednim procesom?

sobes.tech АИ

Одговор од АИ

У контексту једнопроцесног окружења са Scoped зависностима у ASP.NET Core, сваки HTTP захтев добија свој примерак сервиса са Scoped доменом. Када се истовремено извршава више захтева у истом процесу, за сваки захтев се креира посебан Scoped контејнер, изолован од осталих.

Ово се постиже коришћењем механизма DI контејнера, који на почетку захтева креира нови scope и уништава га по завршетку. Тако, чак и у апликацији са једним процесом, сваки захтев ради са својим скупом Scoped сервиса, што спречава конфликте података између захтева.

Приближно овако:

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

// Током обраде сваког захтева, креира се нови scope
app.Use(async (context, next) => {
    using (var scope = app.ApplicationServices.CreateScope())
    {
        var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
        // Коришћење myService у оквиру захтева
        await next();
    }
});

У стварности, ASP.NET Core аутоматски креира scope за сваки HTTP захтев, тако да програмер обично не мора ручно да га креира.