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 захтев, тако да програмер обично не мора ручно да га креира.