Sobes.tech
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.