Scoped tək proses kontekstində eyni vaxtda icra olunan bir neçə sorğunun işlənməsi necə həyata keçirilir?
sobes.tech Süni İntellekt
AI-dan cavab
ASP.NET Core-da bağımlılıqlar üçün Scoped sahə ilə tək prosesli kontekstdə hər HTTP sorğusu öz Scoped xidmət nümunəsini alır. Eyni zamanda bir neçə sorğu eyni prosesdə icra olunarkən, hər sorğu üçün ayrı bir Scoped konteyner yaradılır və digərindən izolyasiya olunur.
Bu, DI konteyner mexanizmi vasitəsilə həyata keçirilir; bu mexanizm, sorğunun başlanğıcında yeni bir scope yaradır və onu tamamlandıqda məhv edir. Beləliklə, hətta tək prosesli tətbiqdə belə, hər sorğu öz Scoped xidmətlər toplusu ilə işləyir və bu, sorğular arasında məlumat münaqişəsini qarşısını alır.
Təxminən belə olur:
// Startup.cs-də
services.AddScoped<IMyService, MyService>();
// Hər sorğu işlənərkən yeni scope yaradılır
app.Use(async (context, next) => {
using (var scope = app.ApplicationServices.CreateScope())
{
var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
// Sorğu çərçivəsində myService istifadə
await next();
}
});
Əslində, ASP.NET Core hər HTTP sorğusu üçün avtomatik olaraq scope yaradır, buna görə də inkişaf etdiricinin onu əl ilə yaratmasına ehtiyac yoxdur.