Sobes.tech
Junior — Middle

Cum se realizează procesarea mai multor solicitări care rulează simultan în cadrul contextului Scoped de un singur proces?

sobes.tech AI

Răspuns de la AI

Într-un context de proces unic cu domeniu Scoped pentru dependențe în ASP.NET Core, fiecare solicitare HTTP primește propria instanță de servicii cu domeniu Scoped. Când se execută mai multe solicitări simultan în același proces, se creează un container Scoped separat pentru fiecare solicitare, izolat de celelalte.

Acest lucru se realizează prin mecanismul containerului DI, care creează un nou scope la începutul solicitării și îl distruge la final. Astfel, chiar și într-o aplicație cu proces unic, fiecare solicitare lucrează cu propriul set de servicii Scoped, prevenind conflictele de date între solicitări.

Cam așa:

// În Startup.cs
services.AddScoped<IMyService, MyService>();

// La procesarea fiecărei solicitări, se creează un nou scope
app.Use(async (context, next) => {
    using (var scope = app.ApplicationServices.CreateScope())
    {
        var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
        // Utilizarea myService în cadrul solicitării
        await next();
    }
});

În realitate, ASP.NET Core creează automat un scope pentru fiecare solicitare HTTP, așa că de obicei dezvoltatorul nu trebuie să îl creeze manual.