Как се осъществява обработката на няколко едновременно изпълняващи се заявки в рамките на еднопроцесния контекст 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 заявка, така че разработчикът обикновено не трябва да го създава ръчно.