C# Dependency Injection
- Sevdanur GENC

- Aug 31, 2012
- 3 min read
Dependency Injection (DI) aslinda bir tasarım şablonu olarak bilinmektedir ve genel amacı nesneler arasında bulunan bağımlılıkları azaltarak kullandığı İnterface'ler sayesinde implement edilen içerikler artık daha farklı bir şekilde işleyişte bulunabileceklerdir. Olayı daha iyi anlayabilmemiz için aynı mantıkta oluşturulmuş olan uygulamayı farklı yöntemlerle inceleyelim. Uygulamalarımızı Console Application tarafında yapalım. Daha açıklayıcı olabilmesi içinde Class Diagram'larını sizlerle paylaşıyor olacağım.
Öncelikle Personel isminde bir sınıf olluşturalım. Oluşturduğumuz bu sınıf içerisinde personellere ait id, isim ve meslek bilgilerini saklayabileceğimiz tanımlamalarımız olsun. Daha sonra bu oluşturmuş olduğumuz sınıf aracılığıyla new parametresi ile veriler oluşturuyoruz. Ve bunları listeye atıyoruz. Yazdır sınıfımız ile de oluşturmuş olduğumuz listeyi ekrana yazdırabilmemiz için çağırmış oluyoruz.
Program.CS Kaynak Kodu;
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace NanonunGunlugu001 { class Personel { public int Id { get; set; } public string Isim { get; set; } public string Meslek { get; set; } } class ListeOlustur { public List<Personel> PersonelListele() { return new List<Personel> { new Personel{Id = 1, Isim = "Sevdanur GENC", Meslek="Yazılım Geliştirici"}, new Personel{Id = 2, Isim = "Selcuk GENC", Meslek="Yazılım Test Uzmanı"} }; } } class Yazdir { ListeOlustur yaz = new ListeOlustur(); public List<Personel> PersonelListele() { return yaz.PersonelListele(); } } class Program { static void Main(string[] args) { var EkranaYazdir = new Yazdir(); Console.WriteLine(EkranaYazdir.PersonelListele()<0>
.Isim + " " + EkranaYazdir.PersonelListele()<0>
.Meslek); Console.WriteLine(EkranaYazdir.PersonelListele()<1>
.Isim + " " + EkranaYazdir.PersonelListele()<1>
.Meslek);
Console.ReadLine();
}
}
}
Ekran Görüntüsü;
Görüldüğü gibi birbirine bağımlı bir şekilde çalışan sınıf ve tiplerin kullanımını basit bir şekilde uygulamış olduk.
Peki bunu Interface'leri kullanarak nasıl yapabiliriz aşağıda inceleyelim.
Program.Cs Kaynak Kodlari ;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace NanonunGunlugu001
{
class Personel
{
public int Id { get; set; }
public string Isim { get; set; }
public string Meslek { get; set; }
}
interface IListeOlustur
{
List<Personel> PersonelListele();
}
class IlkListe :
IListeOlustur
{ public List<Personel> PersonelListele() { return new List<Personel> { new Personel { Id = 1, Isim = "Sevdanur GENC", Meslek = "Yazılım Geliştirici" } }; } } class IkinciListe :
IListeOlustur
{ public List<Personel> PersonelListele() { return new List<Personel> { new Personel { Id = 2, Isim = "Selcuk GENC", Meslek = "Yazılım Test Uzmanı" } }; } } class Yazdir :
IListeOlustur
{
private IListeOlustur yaz;
public Yazdir(IListeOlustur ListeAl)
{
this.yaz = ListeAl;
}
public List<Personel> PersonelListele()
{
return yaz.PersonelListele();
}
}
class Program
{
static void Main(string[] args)
{
var IlkEkranaYazdir = new Yazdir(new IlkListe());
Console.WriteLine(IlkEkranaYazdir.PersonelListele()<0>.Isim + " " + IlkEkranaYazdir.PersonelListele()<0>.Meslek);
var IkinciEkranaYazdir = new Yazdir(new IkinciListe()); Console.WriteLine(IkinciEkranaYazdir.PersonelListele()<0>
.Isim + " " + IkinciEkranaYazdir.PersonelListele()<0>
.Meslek);
Console.ReadLine();
}
}
}
Ekran Görüntüsü ;
This parametresi ile listeyi interface'ler yardımı ile kullanıcıya göstermiş oluyoruz.
Şimdi ise Set parametresini kullanarak verilerimizi interface'ler aracılığıyla çekmeye çalışalım.
Program.Cs Kaynak Kodlari ;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace NanonunGunlugu001
{
class Personel
{
public int Id { get; set; }
public string Isim { get; set; }
public string Meslek { get; set; }
}
interface IListeOlustur
{
List<Personel> PersonelListele();
}
class IlkListe : IListeOlustur
{
public List<Personel> PersonelListele()
{
return new List<Personel> { new Personel { Id = 1, Isim = "Sevdanur GENC", Meslek = "Yazılım Geliştirici" } };
}
}
class IkinciListe : IListeOlustur
{
public List<Personel> PersonelListele()
{
return new List<Personel> { new Personel { Id = 2, Isim = "Selcuk GENC", Meslek = "Yazılım Test Uzmanı" } };
}
}
class Yazdir : IListeOlustur
{
private IListeOlustur yaz;
public IListeOlustur ListeAl { set { yaz = value; } }
public List<Personel> PersonelListele()
{
return yaz.PersonelListele();
}
}
class Program
{
static void Main(string[] args)
{
var IlkEkranaYazdir = new Yazdir();
IlkEkranaYazdir.ListeAl = new IlkListe();
Console.WriteLine(IlkEkranaYazdir.PersonelListele()<0>.Isim + " " + IlkEkranaYazdir.PersonelListele()<0>.Meslek);
var IkinciEkranaYazdir = new Yazdir();
IkinciEkranaYazdir.ListeAl = new IkinciListe();
Console.WriteLine(IkinciEkranaYazdir.PersonelListele()<0>.Isim + " " + IkinciEkranaYazdir.PersonelListele()<0>.Meslek);
Console.ReadLine();
}
}
}
Ekran Görüntüsü ;
Keyifli Çalışmalar Dilerim.
Comments