Junior — Middle
Ako sa vykonáva spracovanie viacerých súčasne prebiehajúcich požiadaviek v rámci Scoped jednoprozessového kontextu?
sobes.tech AI
Odpoveď od AI
V kontexte jednoprozorového prostredia s Scoped závislosťami v ASP.NET Core, každý HTTP požiadavok dostáva svoj vlastný exemplár služieb s Scoped rozsahom. Pri súčasnom vykonávaní viacerých požiadaviek v jednom procese sa pre každý požiadavok vytvorí samostatný Scoped kontajner, izolovaný od ostatných.
Toto sa dosahuje pomocou mechanizmu DI kontajnera, ktorý na začiatku požiadavky vytvorí nový scope a na konci ho zničí. Takže aj v jednoprozorovej aplikácii každý požiadavok pracuje so svojím vlastným súborom Scoped služieb, čím sa zabraňuje konfliktom dát medzi požiadavkami.
Približne takto:
// V Startup.cs
services.AddScoped<IMyService, MyService>();
// Pri spracovaní každého požiadavku sa vytvorí nový scope
app.Use(async (context, next) => {
using (var scope = app.ApplicationServices.CreateScope())
{
var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
// Použitie myService v rámci požiadavku
await next();
}
});
V skutočnosti ASP.NET Core automaticky vytvára scope pre každý HTTP požiadavok, takže vývojár ho zvyčajne nemusí vytvárať ručne.