Home
Blog
Məqalə • 09 İyun, 2025 • 7 min

SOLID & DI

Dependency Injection, IoC konteynerləri və təmiz asılılıq idarəsi

Dependency Injection flow diaqramı

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 Property Injection Method Injection
  • 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

Transient lifetime Scoped lifetime Singleton lifetime Autofac container

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

SOLID principles strip

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).

S — Single Responsibility: Dəyişiklik üçün yalnız bir səbəb olmalıdır. DB loqikasını biznes loqikasından ayırın.
O — Open/Closed: Layihə genişləndirilməyə açıq, dəyişikliklərə qapalı olmalıdır.
L — Liskov Substitution: Alt siniflər əsas siniflərin yerinə tam əvəz edilə bilməlidir (Quş/Pinqvin problemi).
I — Interface Segregation: İstifadə olunmayan metodları tətbiq etməyə məcbur etməyin; interfeysləri kiçik hissələrə bölün.
D — Dependency Inversion: Konkret siniflərdən deyil, abstraksiyalardan asılı olun.
Qeyd: Bu blogdakı bütün diaqramlar, qovluq strukturları və kod nümunələri Lucidchart, Canva və mənim IDE-m vasitəsilə yaradılmışdır. Töhfə vermək və ya təkmilləşdirmə təklif etmək istəyirsinizsə, mənimlə əlaqə saxlayın.