Sobes.tech
Junior — Middle

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.