Dependency Injection Örnek

  1. Eslem78
    6
    790
    3/14/2019 2:23:00 PM

    Dependency Inversion ve Inversion of Control prensiblerine aşağıdaki linklerde örnekler verdiniz , çok teşekkür ederim

    https://code.replyfeed.com/sorular/4888/dependency-inversion-ornek

    https://code.replyfeed.com/sorular/4903/inversion-of-control-ornek

    şimdi ise sizden Dependency Injection tasarım deseni ile ilgili anlaşılır bir örnek rica ediyorum , teşekkürler...

    diğer design-patterns 2 ay önce 197 Görüntüleme

( 1 ) Cevap

  1. askinglr34
    11
    2362
    3/18/2019 12:25:00 PM

    Şimdi seninde belirttiğin üzere , Taksi ve Sofor sınıflarının sıkı bağımlılığı üzerinden giderek , önce Inversion of Control prensibini uygulayarak bu iki sınıfın arasındaki bağımlılığı biraz gevşettik ;

    https://code.replyfeed.com/sorular/4903/inversion-of-control-ornek

    sonra yetmedi ,Dependency Inversion prensibi ile biraz daha gevşettik ;

    https://code.replyfeed.com/sorular/4888/dependency-inversion-ornek

    şimdi ise , Dependency Injection Design Pattern(tasarım deseni) için bir örnek istiyorsun ;

    Evet , bu sorular farklı farklı soruldu ama ben hep yukardaki sıraya göre cevapladım , çünkü farketmişsindir , belli bir sıraya göre bağımlılıkları gevşettik.

    ioc-dip-di-ioccontainer

    1) IoC prensibini uyguladık (https://code.replyfeed.com/sorular/4903/inversion-of-control-ornek)

    2) Dependency Inversion prensibini uyguladık (https://code.replyfeed.com/sorular/4888/dependency-inversion-ornek)

    3)Şimdide Dependency Injection tasarım desenini uygulayacağız

    Şimdi hatırlayacak olursak , Dependency Injection , IoC prensibini yerine getirmek için kurgulanmış bir tasarım desenidir. Bağımlı olunan bir başka sınıfın objesini , sınıf dışında oluşmasını sağlayarak, bağımlı nesnelerin oluşumunu tersine çevirmek için kullanılır.

    Dependency Injection tasarım deseni 3 tane sınıf tipi içerir ;

    1) Client : Bağımlı(muhtaç,dependent ) sınıftır , bir başka sınıfa muhtaçtır (Örn. Taksi sınıfı , Sofor sınıfına muhtaçtır)

    2) Service: Bağımlılık(dependency) sınıfıdır , kendisine muhtaç olunan sınıf (Örn. Sofor sınıfı)

    3) Injector: Muhtaç olunan Service (örn: Sofor) sınıfı objesini , muhtaç olan Client (örn Taksi) sınıfına enjekte eder.

    dependency-injection

    Enjekte Tipleri:

    Şimdi geldik enjekte etme türlerine , 3 tip yolla bu enjekte işlemi gerçekleştirilebilir ,Constructor Injection ,Property Injection ve Method Injection

    1) Constructor Injection: Bu yöntemde Injector , Service sınıfı objesini Client'a clientın constructorı (yapıcı method) üzerinden enjecte eder.

    Şimdi hem buna bir örnek verelim , hemde aynı zamanda artık en baştaki verdiğim şemadaki , 3. Adımı (DI Implement ) gerçekleştirelim , ilk iki adımda verdiğim taksi şofor sınıflarının bağımlılıklarını biraz daha azaltalım ;

    //Client
    public class Taksi
    {
        ISofor _sofor;
    
        //Constructor Injection Yöntemi
        public Taksi(ISofor sofor)
        {
            _sofor = sofor;
        }
    
        public void YolcuTasi()
        {
            _sofor.TaksiKullan();
        }
    }
    
    
    //Service
    public interface ISofor
    {
        void TaksiKullan();
    }
    public class Sofor: ISofor
    {
        public Sofor()
        {
        }
        public void TaksiKullan() 
        {
            //taksi kullanılıyor , bib bib       
        }
    }
    
    
    //Injector
    public class TaksiService
    {
        Taksi _taksi;
    
        public TaksiService()
        {
            _taksi = new Taksi(new Sofor());
        }
    
        public string YolcuTasi(int id) {
            return _taksi.YolcuTasi(id);
        }
    }
    

    2) Property Injection

    Bu yöntemde Injector , Service sınıfı objesini Client'a clientın public property si üzerinden enjecte eder.

    //Client
    public class Taksi
    {
        //Property  Injection Yöntemi
        Public ISofor _sofor {get;set;};
    
    
        public Taksi()
        {
    
        }
    
        public void YolcuTasi()
        {
            _sofor.TaksiKullan();
        }
    }
    
    
    //Service
    public interface ISofor
    {
        void TaksiKullan();
    }
    public class Sofor: ISofor
    {
        public Sofor()
        {
        }
        public void TaksiKullan() 
        {
            //taksi kullanılıyor , düdüüüt       
        }
    }
    
    
    //Injector (Property Injection yöntemi ile )
    public class TaksiService
    {
        Taksi _taksi;
    
        public TaksiService()
        {
            _taksi = new Taksi();
            _taksi._sofor=new Sofor();
    
        }
    
        public string YolcuTasi(int id) {
            return _taksi.YolcuTasi(id);
        }
    }
    

    3) Method Injection:

    Bu yöntemde Injector , Service sınıfı objesini Client'a clientın metodu üzerinden enjecte eder. Bu metod bir interface metodu olursa daha güzel olur ;

    interface ISoforDependency
    {
        void SetDependency(ISofor sofor);
    }
    
    //Client
    //Method Injection yöntemi ile
    public class Taksi : ISoforDependency
    {
        ISofor _sofor;
    
    
        public Taksi()
        {
    
        }
    
        public void SetDependency(ISofor sofor)
        {
            _sofor = sofor;
        }
    
        public void YolcuTasi()
        {
            _sofor.TaksiKullan();
        }
    }
    
    
    //Service
    public interface ISofor
    {
        void TaksiKullan();
    }
    public class Sofor: ISofor
    {
        public Sofor()
        {
        }
        public void TaksiKullan() 
        {
            //taksi kullanılıyor , bib bib       
        }
    }
    
    
    //Injector (Method Injection yöntemi ile)
    public class TaksiService
    {
        Taksi _taksi;
    
        public TaksiService()
        {
            _taksi = new Taksi();
           ((ISoforDependency)_taksi).SetDependency(new Sofor());
        }
    
        public string YolcuTasi(int id) {
            return _taksi.YolcuTasi(id);
        }
    }
    
    • Eslem78 Çok teşekkür ederim , baya baya kafamda oturdu Dependency Injection ,sağolun

    • Yorum Ekleyin

Cevabınız