Sobes.tech
Middle

Bağımlılık Enjeksiyonu (Dependency Injection) ne için kullanılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bağımlılık Enjeksiyonu (Dependency Injection, DI), uygulamanın bileşenleri arasındaki bağımlılıkları yönetmek için kullanılır.

DI’nin temel amaçları:

  • Bağlılığı azaltma: Bileşenler doğrudan bağımlılıklarını oluşturmak yerine, dışarıdan alır. Bu, bileşenleri daha bağımsız hale getirir ve yeniden kullanılabilirliğini kolaylaştırır.
  • Test edilebilirliği artırma: Bireysel bileşenlerin izole test edilmesi daha kolay hale gelir, çünkü gerçek bağımlılıkların yerine mock nesneleri veya taklitler kullanılabilir.
  • Esneklik ve genişletilebilirliği artırma: Bağımlılıkların uygulamalarını değiştirmeden değiştirmek daha kolaydır.
  • Yapılandırmayı basitleştirme: Bağımlılıklar merkezi olarak yapılandırılabilir, örneğin uygulama başlatılırken.

DI’nin temel yaklaşımları:

  • Yapıcı (Constructor) aracılığıyla enjeksiyon: Bağımlılıklar yapıcıya parametre olarak geçirilir. Bu en yaygın ve önerilen yaklaşımdır, çünkü nesne oluşturulurken tüm gerekli bağımlılıkların bulunmasını sağlar.

    // Bağımlılık
    public interface ILogger
    {
        void Log(string message);
    }
    
    // Bağımlılıkla bileşen
    public class MyService
    {
        private readonly ILogger _logger;
    
        public MyService(ILogger logger) // Yapıcı aracılığıyla enjeksiyon
        {
            _logger = logger;
        }
    
        public void DoSomething()
        {
            _logger.Log("Bir şey yapılıyor.");
        }
    }
    
  • Özellik (Property) aracılığıyla enjeksiyon: Bağımlılıklar, genel özellikler aracılığıyla ayarlanır. Daha az tercih edilir, çünkü bağımlılığın ayarlandığını garanti etmez.

    public class MyService
    {
        public ILogger Logger { get; set; } // Özellik aracılığıyla enjeksiyon
    
        public void DoSomething()
        {
            Logger?.Log("Bir şey yapılıyor."); // null kontrolü
        }
    }
    
  • Yöntem (Method) aracılığıyla enjeksiyon: Bağımlılıklar, yönteme parametre olarak geçirilir. Sadece belirli bir yöntemi çalıştırmak için bağımlılık gerekiyorsa kullanılır.

    public class MyService
    {
        public void DoSomething(ILogger logger) // Yöntem aracılığıyla enjeksiyon
        {
            logger.Log("Bir şey yapılıyor.");
        }
    }
    

DI, genellikle DI konteynerleri (Inversion of Control Container) kullanılarak uygulanır, bu konteynerler nesnelerin yaşam döngüsünü yönetir ve bağımlılıklarını çözer. .NET'te popüler DI konteynerleri: Microsoft.Extensions.DependencyInjection (yerleşik), Autofac, Ninject, Castle Windsor.

DI, sürdürülebilir, test edilebilir ve genişletilebilir uygulamalar inşa etmek için temel bir ilkedir.