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.