Sobes.tech
Junior — Middle

Kā tiek veikta vairāku vienlaicīgi izpildāmu pieprasījumu apstrāde Scoped vienprocesu kontekstā?

sobes.tech AI

Atbilde no AI

Vienā procesā ar Scoped atkarpēm ASP.NET Core katram HTTP pieprasījumam tiek piešķirts savs Scoped pakalpojumu instances. Kad vienlaikus tiek izpildīti vairāki pieprasījumi vienā procesā, katram pieprasījumam tiek izveidots atsevišķs Scoped konteiners, kas ir izolēts no citiem.

Tas tiek panākts ar DI konteinera mehānisma palīdzību, kas izveido jaunu scope pieprasījuma sākumā un to iznīcina pēc tam. Tādējādi, pat vienā procesā, katrs pieprasījums strādā ar savu Scoped pakalpojumu kopumu, novēršot datu konfliktus starp pieprasījumiem.

Aptuveni tā:

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

// Katras pieprasījuma apstrādes laikā tiek izveidots jauns scope
app.Use(async (context, next) => {
    using (var scope = app.ApplicationServices.CreateScope())
    {
        var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
        // myService izmantošana pieprasījuma ietvaros
        await next();
    }
});

Patiesībā, ASP.NET Core automātiski izveido scope katram HTTP pieprasījumam, tāpēc izstrādātājam parasti nav nepieciešams to veidot manuāli.