Dependency Injection(Bağımlılık Enjeksiyonu), temel olarak oluşturulacak bir sınıf içerisinde, başka bir sınıfın nesnesi kullanılacak ise new anahtar sözcüğüyle değil, gereken nesnenin ya constructor’dan ya da setter metoduyla parametre olarak alınması gerektiğini vurgulayan bir yaklaşımdır. Bu yaklaşım uygulandığında, yapıların birbirleriyle olan sıkı bağı azalacağı için uygulamaya yeni özellikler eklenip çıkartılabilmesi kolay hale gelecektir.
Dependency Injection Kullanımı
İlk olarak sınıflarımızı ve ‘Giyin’ adlı metodlarımızı oluşturalım.
public class Ceket
{
public string Giyin()
{
return "Hava biraz rüzgarlı olduğu için ceket giydim!";
}
}
public class Gomlek
{
public string Giyin()
{
return "Bugün hava çok iyi olduğu için gömlek giydim!";
}
}
public class Mont
{
public string Giyin()
{
return "Hava çok soğuk olduğu için mont giydim!";
}
}
Ardından ‘Insan’ sınıfımızı oluşturalım.
public class Insan
{
Mont mont = new Mont();
public string Giydir()
{
return mont.Giyin();
}
}
class Program
{
static void Main(string[] args)
{
Insan insan = new Insan(new Mont());
Console.WriteLine(insan.Giydir());
Console.ReadKey();
}
}
Bakıldığında herşey normal gibi ama burada insana, mont değilde gömlek giydirecek olsaydık, Insan sınıfında değişiklik yapmamız gerecekti. Ayrıca insan sınıfı yukarıda anlatıldığı gibi bir sınıfa bağlı. Şuanda mont sınıfıyla işlem yaptığımız için mont sınıfına bağlı durumda.
public interface IKiyafet
{
string Giyin();
}
public class Ceket : IKiyafet
{
public string Giyin()
{
return "Hava biraz rüzgarlı olduğu için ceket giydim!";
}
}
public class Gomlek : IKiyafet
{
public string Giyin()
{
return "Bugün hava çok iyi olduğu için gömlek giydim!";
}
}
public class Mont : IKiyafet
{
public string Giyin()
{
return "Hava çok soğuk olduğu için mont giydim!";
}
}
public class Insan
{
IKiyafet kiyafet;
public Insan(IKiyafet _kiyafet)
{
kiyafet = _kiyafet;
}
public string Giydir()
{
return kiyafet.Giyin();
}
}
class Program
{
static void Main(string[] args)
{
Insan insan = new Insan(new Mont());
Console.WriteLine(insan.Giydir());
Console.ReadKey();
}
}
Artık insan sınıfı bağımlı değil. Artık insana mont değilde ceket yada gömlek giydirmek, program.cs de yapacağımız tek değişikliğe bakar. Örnek olarak, gömlek giydirecek olsak, Insan sınıfına Gomlek sınıfının örneğini göndermemiz yeterli olacaktır.
class Program
{
static void Main(string[] args)
{
Insan insan = new Insan(new Gomlek());
Console.WriteLine(insan.Giydir());
Console.ReadKey();
}
}
Dependency Injection ile anlatacaklarım bu kadar arkadaşlar. İşinize yaraması dileğiyle iyi kodlamalar dilerim.