Dependency Injection (DI) siniflər və onların asılılıqları arasında Inversion of Control (IoC) prinsipini reallaşdırmaq üçün istifadə olunan texnikadır.
Siniflərin öz asılılıqlarını yaratmaq məsuliyyətini götürərək Zəif Əlaqəliliyi (Loose Coupling) təmin edir.
İnvenksiya növləri
- Constructor Injection: Ən çox tövsiyə olunan üsuldur. Kompilyasiya zamanı məcbur edilir və obyektlərin dəyişməzliyini (immutable) qoruyur.
- Property Injection: Asılılıqlar obyekt yaradıldıqdan sonra təyin edilir. Dövri asılılıqlar üçün faydalıdır, lakin null-reference riski daşıyır.
- Method Injection: Asılılıqlar metoda parametr kimi ötürülür. Yalnız spesifik hərəkət üçün lazım olduqda uyğundur.
IoC & DI konteynerləri
IoC Container: DI prosesini avtomatlaşdıran alətdir. Asılılıqları həll edir (resolve) və lazımi yerə ötürür (inject). Nümunələr: Autofac, Unity, Ninject, .NET built-in DI.
Servis ömürləri
01. Transient
Hər müraciət olunduqda yeni instansiya yaradılır. Qısamüddətli və yüngül əməliyyatlar üçün idealdır.
02. Scoped
Hər HTTP sorğusu üçün bir instansiya yaradılır. Eyni sorğu daxilində paylaşılır (məsələn, DbContext).
03. Singleton
Tətbiqin bütün ömrü boyu bir instansiya yaradılır. Keşləmə və konfiqurasiya üçün idealdır.
AutoFac
Daxili DI strukturuna nisbətən daha çevikdir. Yeni instansiyalar üçün
RegisterType<T>(), mövcud obyektlər üçün
RegisterInstance(obj) metodlarını dəstəkləyir.
SOLID prinsipləri
Coupling (Əlaqəlilik): Komponentlərin bir-birindən asılılıq dərəcəsidir. Məqsəd: Aşağı əlaqəlilik (abstraksiyalar vasitəsilə).
Cohesion (Bütövlük): Bir sinfin üzvlərinin bir-biri ilə nə dərəcədə bağlı olduğudur. Məqsəd: Yüksək bütövlük (vahid məsuliyyət).