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.