NET Dependency Injection (DI) Nedir ve Nasıl Kullanılır?
Blog Bilgileri
- Yazar: Fatih Kastalmiş
- E-Posta: fatih.kastalmis@gmail.com
- Kategori: Yazılım
- Yayın Tarihi: 02 May 2025
Modern yazılım geliştirme dünyasında, uygulamaların sürdürülebilir, genişletilebilir ve test edilebilir olması birincil önceliktir. Ancak bileşenler doğrudan birbirine bağımlı hale geldiğinde, kodun tekrar kullanılabilirliği düşer, test yazmak zorlaşır ve bakım maliyeti artar. İşte bu noktada Dependency Injection (DI) devreye girer.
Dependency Injection, bir sınıfın ihtiyaç duyduğu bağımlılıkları (örneğin başka sınıflar, servisler) doğrudan kendisi oluşturmadan, dışarıdan almasını sağlayan bir tasarım desenidir. Bu sayede, sınıflar birbirine doğrudan bağımlı olmaz; sadece arayüzlere bağımlı hale gelirler. Böylece uygulamanızda gevşek bağlılık (loose coupling) sağlanır.
.NET Core ve devam eden sürümler, Dependency Injection yerleşik olarak destekler. Framework bize bu bağımlılıkları programatik olarak yönetme, yaşam döngüsünü belirleme ve servisleri enjekte etme imkânı sunar.
Temiz Mimarinin Temeli Dependency Injection
Dependency Injection Neden Kullanılır?
- Kodun gevşek bağlı (loosely coupled) olmasını sağlar.
- Test süreçlerinde mock servislerin kullanılmasını mümkün kılar.
- Tek sorumluluk ilkesi (SRP) uygulanabilir hale gelir.
- Uygulama daha esnek ve bakımı kolay olur.
Kötü Örnek: Doğrudan Bağımlılık Oluşturma
🔴 Sorunlar:
NotificationManagersadeceEmailServiceile çalışabilir.EmailServicedeğişirseNotificationManagerda değişmek zorundadır.- Test etmek zordur çünkü sahte bir servis verilemez.
Doğru Örnek: Interface + DI Yaklaşımı
✅ Artık NotificationManager sadece IMessageService bağlıdır. Bu sayede farklı servislerle de çalışabiliriz:
.NET Core Dependency Injection(DI) Kaydı ve Kullanımı
AddScoped vs AddSingleton vs AddTransient
AddSingleton: Uygulama süresince tek örnek. Genellikle log, cache gibi global veriler için uygundur.
AddScoped: Her HTTP isteğinde bir örnek. Web API projelerinde en yaygın tercih edilen yöntemdir.
AddTransient: Her kullanımda yeni bir örnek. Hafif, bağımsız servisler için idealdir.
Unit Test ile DI Kullanımı
Mock servisle test kolaylığı:
Gerçek Hayattan Senaryo: Logger Örneği
🧠 Özetle:
Dependency Injection, .NET projelerinde esneklik, test edilebilirlik ve bakım kolaylığı sağlar. 🎯 Kodların sıkı sıkıya birbirine bağlı olmasını önleyerek, daha sürdürülebilir ve modüler bir yapı oluşturur.
👨🔧 Mock servislerle test süreci kolaylaşır, 🧪 farklı senaryolar denenebilir.
📦 AddScoped, AddSingleton ve AddTransient gibi yaşam süresi seçenekleriyle servislerin kullanım biçimi tamamen kontrol altına alınabilir.
🔧 Gerçek dünyada logger, email, sms, database gibi servislerin yönetiminde DI büyük kolaylık sağlar.
✨ Unutma: Sağlam bir mimari, gevşek bağlı sınıflarla başlar! 💡