Jak realizowana jest obsługa wielu jednoczesnych zapytań w ramach kontekstu Scoped jednoprocesowego?
sobes.tech AI
Odpowiedź od AI
W kontekście jednoprocesowym z zakresem Scoped dla zależności w ASP.NET Core, każde żądanie HTTP otrzymuje własny egzemplarz usług z zakresem Scoped. Przy równoczesnym wykonywaniu wielu żądań w jednym procesie tworzony jest oddzielny kontener Scoped dla każdego żądania, izolowany od innych.
Osiąga się to za pomocą mechanizmu kontenera DI, który tworzy nowy zakres na początku żądania i niszczy go po jego zakończeniu. W ten sposób, nawet w aplikacji jednoprocesowej, każde żądanie pracuje z własnym zestawem usług Scoped, co zapobiega konfliktom danych między żądaniami.
Przykład wygląda mniej więcej tak:
// W Startup.cs
services.AddScoped<IMyService, MyService>();
// Podczas obsługi każdego żądania tworzony jest nowy zakres
app.Use(async (context, next) => {
using (var scope = app.ApplicationServices.CreateScope())
{
var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
// Użycie myService w ramach żądania
await next();
}
});
W rzeczywistości ASP.NET Core automatycznie tworzy zakres dla każdego żądania HTTP, więc programista zazwyczaj nie musi go tworzyć ręcznie.