.net Core depedency injection ve captive depedencies

.Net dünyası, .net core’un çıkışıyla birlikte DI için entegre çözüm üretti ve Microsoft.Extensions.DependencyInjection kütüphanesini geliştirdi. Tabi hala Autofac gibi third party DI managerları da kullamaya devam edebiliyoruz. Ama bence dahili kütüphane gayet başarılı ve yeterli. Bu makalede birbirine inject edilen interface’lerin yönetimi ile ilgili bir kaç şey paylaşarak doğabilecek sorunların önüne nasıl geçebileceğimizi anlatmaya çalışacağım. Çünkü bazı durumlarda hatalı register yöntemi tercihleri uygulamanızın istediğiniz gibi çalışmasını engelleyebilir.

Örnek olarak aşağıdaki gibi iki class’ımız

ve bunları servis veren iki tane interface’imiz olsun.

Microsoft DI kütüphanesi IProductService interface’ini ProductService class’ı ile register etmek için bize üç metot veriyor.

Transient; Her inject işlemi için yeni bir instance üretir.
Scoped, bir http isteği içinde aynıdır, ancak farklı isteklerde farklıdır.
Singleton nesneleri, her nesne ve her istek için aynıdır (bir örneğin ConfigureServices içinde sağlanmış olmasına bakılmaksızın)

Bu durumda eğer interface’imizi singleton kaydedersek “getProductFromDb” sadece bir keç çalışacak, eğer scoped kaydedersek her istek için bir kez çalışacak, transient kaydedersek her _cachedProducts sürekli null olacak ve dolayısıyla “getProductFromDb” sürekli çalışacak.

eee sorun nerede?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir