Sobes.tech
Junior — Middle

Ինչպե՞ս է կատարվում միաժամանակ մի քանի հարցումների մշակումը 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 հարցման համար, ուստի ծրագրավորողը սովորաբար պետք չէ ձեռքով ստեղծել այն։