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.

Image for post
Image for post

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.

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.

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.

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.

Image for post
Image for post

İ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 :

Image for post
Image for post

Service:

Image for post
Image for post

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

Image for post
Image for post

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

Image for post
Image for post

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.

Image for post
Image for post

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 :)

Continuously learning developer. Software Engineer @intertechIT Checkout my open source projects at http://github.com/okandavut

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store