Junior — Middle
Hogyan történik több egyidejű kérés feldolgozása a Scoped egyprocesszusos kontextusában?
sobes.tech MI
Válasz az MI-től
ASP.NET Core-ban, egy egyfolyamú kontextusban, Scoped függőségek esetén minden HTTP-kérés saját példányt kap a Scoped szolgáltatásokból. Amikor több kérés fut egyidejűleg ugyanabban a folyamatban, külön Scoped konténert hozunk létre minden kéréshez, amely elszigetelt a többitől.
Ez a DI-konténer mechanizmusával érhető el, amely új scope-ot hoz létre a kérés kezdetén, és a végén megsemmisíti. Így még egy egyfolyamú alkalmazásban is minden kérés saját Scoped szolgáltatáskészlettel dolgozik, megelőzve az adatok közötti konfliktusokat.
Kb. így néz ki:
// Startup.cs-ben
services.AddScoped<IMyService, MyService>();
// Minden kérés feldolgozásakor új scope jön létre
app.Use(async (context, next) => {
using (var scope = app.ApplicationServices.CreateScope())
{
var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
// MyService használata a kérés keretében
await next();
}
});
Valójában az ASP.NET Core automatikusan létrehoz egy scope-ot minden HTTP-kéréshez, így a fejlesztőnek általában nem kell kézzel létrehoznia.