Dependency Injection(DI) Nedir? Neden Kullanırız?

Dependency Injection, Object Oriented Programing kodlama yapmak için class, interface, constructor, property, access modifiers, generic type v.b. bunun gibi birçok kavramı okunabilir, geliştirilebilir, tekrar kullanılabilir, güvenli ve performanslı çalışan uygulamalar yapmak için kullanıyoruz. Bu makalede bunlardan biri olan Dependency Injection nedir ve neden kullanmalıyız konularını örnekler ile işleyeceğiz.

Dependency Injection(DI) Nedir? Neden Kullanırız?

Makale Devamında Kullanılacak Kısatmalar

KısaltmaAçılımı
DIDependency Injection
OOP Object Oriented Programing

OOP kodlama yaparken girişte bahsettiğim 5-10 tane terim kullanmıyoruz bu yazdıklarım üzerine onlarca yeni terim daha eklenebilir ama biz bu makalemizde DI’i ele alacağız. DI’yı 3 farklı şekilde kullanabiliyoruz. Bu kullanım alanları ise şöyle;

  1. Constructor Injection
  2. Method Injection
  3. Property Injection

c large 090113071734 1Bu 3 kullanımıda örnekler ile ele alacağız ama örnekleri ele almadan önce başlıktaki Nedir ve Neden sorularına cevap verelim.

Nedir ve Neden sorularına birden cevap vereceğim: bağımlıkları en aza indirmek ve bu bağımlıkları yönetmek konusunu daha sağlıklı hale getirmek için DI kullanacağız. Açıklamanın bu şekilde pek anlaşılır olmadığı yazarkende fark ettim ama örnekler üzerinden çok daha anlaşılır olacağını düşünüyorum.
Şimdi 3 farklı kullanım türü olduğunu söylemiştir bunlara sırasıyla örnek verelim ama örneğimizin kurgusunu öncelikle anlatalım örneğimiz Araba üzerine olacak bildiğiniz gibi araçların özellikleri standart olabiliyor. Bunlar Teker sayısı, renk, model, marka gibi özellikler aynı ama değerleri farklı olabiliyor bildiğiniz gibi. Şimdi biz olayı çok fazla karmaşık hale getirmeden bu saydığım özellikler üzerinden gideceğiz.

Uygulamayı kodlamaya geçmeden önce bu örnekte Console Application projesini ve .NET Framework 4.5.2 sürümü kullanacağımı belirtmek istiyorum böylelik yazacağınız bazı kısımların neden bende hata verdi gibi durumların önüne geçmek adına.

IAraba adında bir interface oluşturuyoruz ve bu interface içeriğini şu şekilde dolduruyoruz.

Şimdi bu IAraba arayüzünden türetilmiş 2 araç markası sınıfı oluşturacağız oluşturduğumuz 2 araç markası sınıfları şu şekilde.

Gördüğünüz gibi IAraba arayüzünden türetilmiş 2 farklı Renault ve Fiat araç sınıfı olduğunu görüyoruz.


Constructor Injection

Şimdi DI’i anlayacağımız kısma geçiyoruz ilk önce kodu yazıp sonra yorumlayalım. AracYonetimi adında bir sınıf oluşturuyoruz ve bu sınıfın constructor’indan IAraba arayüzünden türetilmiş sınıfı inject ediyoruz.

Buraya kadar yazdığımız kodları kullanmaya başlayalım. AracYonetimi adlı sınıftan bir örnek alacağız ve bu aldığımız örneğin constructor metodunu kullanarak tüm özelliklerine değerini vermiş oluyoruz. Sonrasında TumOzellikler adındaki metodu kullanıp console ekranına vermiş olduğumuz özelliklerin değerlerinin basıldığını görüyoruz.

Çıktı

TekerSayisi:2
Renk:Color [Red]
Model:500L
Marka:Fiat

AracYonetimi içinde tanımladığımız _araba field’ındaki IAraba arayüzünden türetilmiş sınıf üzerinde değişiklikleri yapmak için TekerSayisiDegistir, ModelDegistir ve RenkDegistir metodlarını kullanacağız ve bu değişikiği console’a bastırarak göreceğiz.

Çıktı

TekerSayisi:4
Renk:Color [Blue]
Model:500X
Marka:Fiat

Görüldüğü üzere metodlar sayesinde AracYonetimi constructor’ina geçtiğimiz IAraba arayüzünden türetilmiş sınıfın özelliklerinde değişikliği yapabiliyoruz new Fiat… yerine new Renault… yazarak başka değişiklik yapmadan Method Dependency Injection’i kullanabiliyoruz.


Property Injection2Q==

Property injection’da tek değişen üst örneğimizde yer alan _araba adlı field’i bir özelliğe çeviriyoruz ve constructor’ı kaldırıyoruz(isterseniz constructor aracılığı ile Araba adlı özelliğe değer atayabilirsiniz) AracYonetiminin son haline gözatalım.

AracYonetimi adlı sınıfta yaptığımız değişiklik sonrası şu şekilde kullanıyoruz.

Çıktı önceki constructor injection’daki gibi olduğundan bir daha çıktıyı verip konuyu uzatmak istemiyorum.


Method Injection2Q==

Method injection’da consturtor yada özellik tanımlayıp IAraba arayüzünden türemiş sınıfı almayacağız bu defa metodların ilk parametresine IAraba arayüzünü ekleyeceğiz ve bu şekilde IAraba arayüzünden türemiş sınıfları parametre ile elde edeceğiz.

Öncelikle AracYonetimi adlı sınıfı alttaki şekilde değiştiriyoruz.

Gördüğünüz gibi Method Injection yöntemini kullandığımız için tüm metodların ilk parametresine IAraba arayüzünü ekliyoruz.

Method Injection adlı yöntemi uyguladığımız AracYonetimi adlı sınıfın kullanımı ise şu şekilde olacak.


Bu makale ile ilgili olumlu-olumsuz tüm görüşeriniz için bana yorum yada mail yolu ile ulaşabilirsiniz.

Makalede kullanılan tüm örneklere ve C# ile ilgili diğer tüm örneklere github hesabımdan erişebilirsiniz buraya tıklayıp github hesabıma erişebilirsiniz.

Video

.Net Core ve Blazor’da Dependency Injection yönetimi nasıl yapılıyor diye merak ediyorsanız altta gördüğünüz videoyu izleyebilirsiniz.

4.9/5 - (10 votes)

Murat Öner sitesinden daha fazla şey keşfedin

Okumaya devam etmek ve tüm arşive erişim kazanmak için hemen abone olun.

Okumaya devam et