Dependency Injection nedir? ASP.NET Core projelerinde nasıl kullanılır?

Arkadaşlar selamlar bu yazımda, ASP.NET Core projelerinde çok kullandığımız Dependency Injection kavramından ve yaşam döngüsünden bahsedeceğim.

Dependency injection SOLID prensiplerini uygularken bağımlılıkların en aza indirmek için kullanılan bir yöntemdir. Dependency injection kullanımı ile beraber loosely coupled yapısına da uygun kod yazmış oluruz.Projeye yeni özellikler eklerken, düzeltme veya ekleme yapılacak bölümler en aza indirilmiş olur.

Bağımlılık tanımlarını yaparken 3 adet farklı yaşam döngüsü bulunmaktadır.

Transient (AddTransient)

Uygulama içerisinde bağımlılık olarak oluşturduğumuz ve kullandığımız nesnenin her kullanım ve çağrıda tekrardan oluşturulmasını sağlar.

Singleton (AddSingleton)

Uygulama içerisinde bağımlılık oluşturduğumuz ve kullandığımız nesnenin tek bir sefer oluşturulmasını ve aynı nesnenin uygulama içinde kullanılmasını sağlar.

Scoped (AddScoped)

Uygulama içerisindeki bağımlılık oluşturduğumu nesnenin request sonlanana kadar aynı nesneyi kullanmasını farklı bir çağrı için gelindiğinde yeni bir nesne yaratılmasını sağlar.

ASP.NET Core Projelerinde Kullanımı

Ben Github üzerinde Redis örneği olarak yapmış olduğum bir örnekte nasıl kullandığımdan bahsedeceğim. https://github.com/okandavut/DotnetCoreRedisExample

Proje klasör yapısı aşağıdaki gibidir. Services katmanında yazdığım bir methodu Controller sınıfında dependency injection yöntemi ile nasıl çağırdım onu göstereceğim.

İlk olarak oluşturduğum servis methodu aşağıdaki gibidir :

Oluşturduğum service IBankingOperationsService interface’ine ait methodları kullanmaktadır. Dependency injection yöntemi için yukarda bahsettiğim gibi interface kullanmanız gerekmektedir.

Interface :

Service:

Yukarıdaki kodda çok basit bir şekilde, listeyi çağırıldığı yere gönderen bir method bulunmaktadır.

Bu tanımları yaptıktan sonra Startup.cs içerisine bu servis methodunu inject ederken kullanacağınız yöntemi tanımlamanız gerekmektedir. Bunu tüm bağımlılıklar için yapmanız gerekiyor.

Aşağıdaki kod ile Scoped tipindeki (yapılan request sonlanan kadar) yaşam döngüsü ile ekliyorum.

Scoped : AddScoped, Transient : AddTransient, Singleton : AddSingleton

Bu ekleme ile beraber artık bu servisi dependency injection yöntemi ile controller sınıfımda kullanabilirim. Bunun için :

Yukarıdaki kod ile aslında kullanacağımız servisin nesnesini private olarak tanımlıyoruz.

Controller constructor methodunda ise inject edeceğimiz servisi tanımladıktan sonra, contructor üzerine gelen değeri, private olarak yarattığımız nesne içerisine atıyoruz. Bu sayede en az bağımlılık ile servis içerisindeki tüm methodlara ulaşabiliyoruz.

Aşağıdaki kod ile de servis methodunu çağırıyoruz.

Sonuç olarak Dependency Injection hem bağımlılıkları en aza indirmeyi hemde kolayca yönetebilmemizi sağlamaktadır. 🙂

Elimden geldiği kadar basitçe Dependency İnjection konusunu anlatmaya çalıştım. Okuduğunuz için teşekkür ederim, paylaşım ve alkışlar motivasyonu artıracaktır 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *