Junior — Middle
Jak je zajištěno zpracování několika současně probíhajících požadavků v rámci jednoprocesového kontextu Scoped?
sobes.tech AI
Odpověď od AI
V kontextu jednoprocesového prostředí s Scoped závislostmi v ASP.NET Core každý HTTP požadavek obdrží svůj vlastní exemplář služeb s Scoped rozsahem. Při současném provádění několika požadavků ve stejném procesu je pro každý požadavek vytvořen samostatný Scoped kontejner, izolovaný od ostatních.
Toho se dosahuje pomocí mechanismu DI kontejneru, který na začátku požadavku vytvoří nový scope a na konci ho zničí. Takže i v jednoprozorové aplikaci každý požadavek pracuje se svým vlastním souborem Scoped služeb, což zabraňuje konfliktům dat mezi požadavky.
Přibližně takto:
// V Startup.cs
services.AddScoped<IMyService, MyService>();
// Při zpracování každého požadavku je vytvořen nový scope
app.Use(async (context, next) => {
using (var scope = app.ApplicationServices.CreateScope())
{
var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
// Použití myService v rámci požadavku
await next();
}
});
Ve skutečnosti ASP.NET Core automaticky vytváří scope pro každý HTTP požadavek, takže vývojář obvykle nemusí ho vytvářet ručně.