Dependency Injection nedir? IoC container ne işe yarar?

Cevap

Dependency Injection (DI), bir sınıfın ihtiyaç duyduğu bağımlılıkları kendisinin oluşturması yerine dışarıdan almasıdır. Bu, Inversion of Control (IoC) prensibinin bir uygulamasıdır: nesne oluşturma kontrolü sınıftan alınıp dışarıya verilir.

DI olmadan

class OrderService:
    def __init__(self):
        self.repo = PostgresOrderRepo()     # somut sınıfa sıkı bağlı
        self.mailer = SmtpMailer("smtp.example.com")

Test yazarken gerçek veritabanı ve SMTP gerekir; implementasyonu değiştirmek için sınıfı değiştirmek gerekir.

DI ile

class OrderService:
    def __init__(self, repo: OrderRepo, mailer: Mailer):
        self.repo = repo
        self.mailer = mailer

# Üretim
service = OrderService(PostgresOrderRepo(db), SmtpMailer(cfg))

# Test
service = OrderService(InMemoryOrderRepo(), FakeMailer())

Enjeksiyon türleri

  • Constructor injection: önerilen yöntem. Bağımlılıklar zorunlu ve görünür, nesne her zaman geçerli durumda oluşur.
  • Setter/property injection: opsiyonel bağımlılıklar için.
  • Method injection: yalnızca tek bir çağrıda gereken bağımlılık için.

IoC container

Büyük uygulamalarda nesne grafiğini elle kurmak zahmetlidir. Container (Spring, .NET IServiceCollection, NestJS, Angular) bağımlılıkları kayıttan çözer, nesneleri oluşturur ve yaşam süresini yönetir:

ÖmürAnlamı
SingletonUygulama boyunca tek örnek
Scopedİstek (request) başına bir örnek
TransientHer talepte yeni örnek

Klasik hata: singleton bir servise scoped bir bağımlılık (ör. DB context) enjekte etmek; scoped nesne gereğinden uzun yaşar (captive dependency).

DI bir container gerektirmez; elle yapılan constructor injection da DI'dır. Container yalnızca kolaylık sağlar.

  1. Clean code nedir? Yaygın code smell'ler nelerdir?OrtaOOP & Tasarım DesenleriYazılım Müh.
  2. Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  3. Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?OrtaOOP & Tasarım DesenleriYazılım Müh.
  4. Factory deseni nedir? Ne zaman kullanılır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  5. Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?ZorOOP & Tasarım DesenleriYazılım Müh.
  6. Interface ile abstract class arasındaki fark nedir?KolayOOP & Tasarım DesenleriYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle