Sobes.tech
Junior — Middle

Как се осъществява обработката на няколко едновременно изпълняващи се заявки в рамките на еднопроцесния контекст Scoped?

sobes.tech AI

Отговор от AI

В контекста на единичен процес с обхват Scoped за зависимости в ASP.NET Core, всеки HTTP заявка получава свой собствен екземпляр на услуги с обхват Scoped. При едновременно изпълнение на няколко заявки в един процес, се създава отделен Scoped контейнер за всяка заявка, изолиран от другите.

Това се постига чрез механизма на DI контейнера, който създава нов обхват в началото на заявката и го унищожава при завършване. Така, дори в еднопроцесно приложение, всяка заявка работи със собствен набор от Scoped услуги, което предотвратява конфликти на данни между заявките.

Приблизително така:

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

// При обработка на всяка заявка се създава нов обхват
app.Use(async (context, next) => {
    using (var scope = app.ApplicationServices.CreateScope())
    {
        var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
        // Използване на myService в рамките на заявката
        await next();
    }
});

В действителност, ASP.NET Core автоматично създава обхват за всяка HTTP заявка, така че разработчикът обикновено не трябва да го създава ръчно.