Ինչպե՞ս է կատարվում միաժամանակ մի քանի հարցումների մշակումը Scoped-ով մեկ գործընթացային կոնտեքստում:
sobes.tech AI
Պատասխան AI-ից
ASP.NET Core-ում, մեկ գործընթացային կոնտեքստում՝ Scoped կախվածությունների համար, յուրաքանչյուր 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 հարցման համար, ուստի ծրագրավորողը սովորաբար պետք չէ ձեռքով ստեղծել այն։