Sobes.tech
Junior — Middle

Scoped tekil süreç bağlamında aynı anda yürütülen birkaç isteğin işlenmesi nasıl gerçekleştirilir?

sobes.tech yapay zeka

AI'dan gelen yanıt

ASP.NET Core'da Scoped kapsam alanına sahip bağımlılıkların tek işlemli bağlamında, her HTTP isteği kendi Scoped hizmet örneğini alır. Aynı anda birden fazla isteğin aynı işlemde yürütülmesi durumunda, her istek için izole edilmiş ayrı bir Scoped konteyner oluşturulur.

Bu, DI konteyner mekanizması kullanılarak sağlanır; bu mekanizma, isteğin başlangıcında yeni bir scope oluşturur ve tamamlandığında yok eder. Böylece, tek işlemli bir uygulamada bile, her istek kendi Scoped hizmet setiyle çalışır ve bu da istekler arasında veri çatışmasını önler.

Yaklaşık olarak şöyle olur:

// Startup.cs'de
services.AddScoped<IMyService, MyService>();

// Her isteğin işlenmesi sırasında yeni bir scope oluşturulur
app.Use(async (context, next) => {
    using (var scope = app.ApplicationServices.CreateScope())
    {
        var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
        // İstek kapsamında myService kullanımı
        await next();
    }
});

Gerçek şu ki, ASP.NET Core her HTTP isteği için otomatik olarak bir scope oluşturur, bu nedenle geliştiricinin bunu manuel olarak oluşturmasına genellikle gerek yoktur.