Dependency Injection Nedir?

İngilizce: Dependency Injection

Dependency injection, sınıfın ihtiyaç duyduğu bağımlılıkları kendi oluşturmadan dışarıdan almasını sağlayan tasarım desenidir.

Dependency Injection Nedir?

Dependency injection (DI), bir nesnenin ihtiyaç duyduğu servis, repository, API istemcisi veya konfigürasyonu kendi içinde oluşturmaması; bunların dışarıdan verilmesi prensibidir. Böylece sınıf neyi kullanacağını bilir, ama nasıl oluşturulacağını bilmek zorunda kalmaz.

Örneğin OrderService doğrudan new EmailClient() çağırmak yerine e-posta gönderici bağımlılığını constructor üzerinden alırsa test sırasında gerçek e-posta servisi yerine sahte bir nesne verilebilir.

Nasıl Çalışır?

DI üç yaygın biçimde uygulanır: constructor injection, method injection ve property injection. En sık tercih edilen yöntem constructor injection’dır; çünkü bağımlılıklar nesne oluşturulurken açıkça görünür ve eksik bırakılması daha zordur.

DI container kullanan framework’ler bağımlılık grafiğini tanımlar, gerekli nesneleri oluşturur ve uygun yaşam döngüsüyle sınıflara verir. Spring, .NET, NestJS ve Angular bu yaklaşımı yaygın kullanır.

Neden Kullanılır?

Dependency injection kodun test edilebilirliğini, gevşek bağlılığını ve değiştirilebilirliğini artırır. Ancak her küçük sınıf için aşırı soyutlama yapılırsa kod okunması zor hale gelebilir.

Tasarım deseni olarak DI, SOLID prensiplerinden özellikle Dependency Inversion ile ilişkilidir. İş kuralları somut altyapı sınıflarına bağımlı olmadığında veritabanı, e-posta sağlayıcı veya dış API değişiklikleri daha sınırlı etki yaratır.