Bağımlılıkların yaşam döngüsünü yönetmek, uygulama bileşenlerinin birbirinden bağımsız ve kolayca test edilebilir şekilde yaratılmasını, başlatılmasını, güncellenmesini ve yok edilmesini organize etmektir. Bunun için genellikle IoC konteynerleri (Kontrol Tersine Çevirme) ve Bağımlılık Enjeksiyonu (DI) şablonu kullanılır.
IoC konteyneri şunları sağlar:
Microsoft.Extensions.DependencyInjection kullanarak C# örneği:
public interface IMessageSender { void Send(string msg); } public class EmailSender : IMessageSender { public void Send(string msg) { /* e-posta gönderimi */ } } // Bağımlılıkların kaydı var services = new ServiceCollection(); services.AddScoped<IMessageSender, EmailSender>(); // Örneğin alınması var provider = services.BuildServiceProvider(); var sender = provider.GetService<IMessageSender>(); sender.Send("Merhaba!");
Anahtar özellikler:
Bağımlılık Enjeksiyonu (DI) ile Servis Yerleşimcisi (Service Locator) şablonu arasındaki fark nedir ve neden Servis Yerleşimcisi anti-patern olarak kabul edilir?
Servis Yerleşimcisi, bağımlılıkların belirgin olarak aktarımını ihlal eder, kodu daha az şeffaf hale getirir. Derleyicinin bağımlılıkların doğruluğunu kontrol etmesi için DI'yı yapıcı veya yöntemler aracılığıyla kullanmak daha iyidir.
// Kötü: Servis Yerleşimcisi var sender = ServiceLocator.Get<IMessageSender>(); // İyi: DI aracılığıyla public class MyService { public MyService(IMessageSender sender) { ... } }
Singleton deseni ile DI konteynerindeki Tek Örnek (Single Instance) yaşam süresi arasındaki fark nedir?
Singleton deseni elle uygulanır ve konteynerden bağımsızdır; Tek Örnek, konteynerden bir örnek sağlar, bu da birim testleri ve genişleme için daha güvenlidir.
Tüm sınıflarda, basit yardımcı sınıflar bile, bağımlılıkları enjekte etmek gerekli mi?
Hayır. Bağımlılığı olmayan veya zayıf bağlı yardımcı sınıflar (örneğin, matematik sabitleri sınıfı) için DI eklemek anlamlı değildir; bu, koda fayda sağlamadan karmaşıklık katmanıdır.