Dependency Injection(DI) Nedir? Nasıl Uygulanır?

Dependency Injection(DI) Nedir? Nasıl Uygulanır?

Herkese merhaba, bu yazımda sizlere Dependency Injection konusundan bahsedeceğim. Keyifli okumalar :)

Dependency Injection Nedir?

  • Bağımlılık Enjeksiyonu (DI), IoC’yi uygulamak için kullanılan bir tasarım modelidir.

  • Design Pattern’dir.

  • Bağımlılık oluşturacak parçaların ayrılıp, bunların dışardan verilmesiyle sistem içerisindeki bağımlılığı minimize etme işlemidir.

  • Yani, temel olarak oluşturacağınız bir sınıf içerisinde başka bir sınıfın nesnesini kullanacaksanız new anahtar sözcüğüyle oluşturmamanız gerektiğini söyleyen bir yaklaşımdır.

  • Bağımlılıkların taklit edilmesine veya ortadan kaldırılmasına olanak tanıdığından test için çok yararlı bir tekniktir.

  • Bağımlılıklar nesnelere birçok yolla (Constructur veya setter enjeksiyonu gibi) enjekte edilebilir.

  • Bir sınıf dışında bağımlı nesnelerin oluşturulmasına olanak tanır ve bu nesnelerin bir sınıfa farklı yollarla sunulmasını sağlar.

Dependency Injection modeli 3 tür sınıf içerir.

  1. Client Class: İstemci sınıfı (bağımlı sınıf), hizmet sınıfına bağlı bir sınıftır.

  2. Service Class: Hizmet sınıfı (bağımlılık), istemci sınıfına hizmet sağlayan sınıftır.

  3. Injector Class: Enjektör sınıfı, hizmet sınıfı nesnesini istemci sınıfına enjekte eder.

  • Görüldüğü gibi enjektör sınıfı, hizmet sınıfının bir nesnesini oluşturur ve bu nesneyi bir istemci nesnesine enjekte eder. Bu şekilde DI modeli, hizmet sınıfına ait bir nesne oluşturma sorumluluğunu istemci sınıfından ayırır.

Dependency Injection Türleri

  • Constructor injection
public class BooksController{
private readonly IServiceManager _manager;

public BooksController(IServiceManager manager)  //Constructor
{ 
    _manager = manager;
}
}
  • Method Injection
public class GFG { 


    private IGeek _geek; 

    public void setGeek(IGeek geek) 
    { 
        _geek = geek; 
    } 
}
  • Property(setter) Injection
public class ClassA
{
   private IService _service;
   public IService Service
   {
      set
       {
          this._service = value;
       }
   }

}