Asılılıqların injeksiyası (Dependency Injection) nə üçün istifadə olunur?
sobes.tech Süni İntellekt
AI-dan cavab
Asılılıqların injektsiyası (Dependency Injection, DI) tətbiqin komponentləri arasındakı asılılıqları idarə etmək üçün istifadə olunur.
DI-nin əsas məqsədləri:
- Bağlılığı azaltmaq: Komponentlər öz asılılıqlarını birbaşa yaratmır, əvəzinə xaricdən alır. Bu, komponentləri daha müstəqil edir və onları yenidən istifadə etməyi asanlaşdırır.
- Test ediləbilərliyi artırmaq: Fərdi komponentlərin izolyasiya olunmuş testləri daha asan olur, çünki real asılılıqlar yerinə mock obyektlər və ya saxtalaşdırmalar istifadə oluna bilər.
- Əlçatanlıq və genişləndirilə bilmə qabiliyyətini artırmaq: Asılılıqların tətbiqini dəyişmədən, onları dəyişdirmək daha asandır.
- Konfiqurasiyanın sadələşdirilməsi: Asılılıqlar mərkəzləşdirilmiş şəkildə konfiqurasiya oluna bilər, məsələn, tətbiq işə salınarkən.
DI-ın əsas yanaşmaları:
-
Konstruktor vasitəsilə injeksiya (Constructor Injection): Asılılıqlar konstruktor parametrləri kimi ötürülür. Bu ən yaygın və tövsiyə olunan yanaşmadır, çünki obyekt yaradılarkən bütün zəruri asılılıqların mövcudluğunu təmin edir.
// Asılılıq public interface ILogger { void Log(string message); } // Asılılıq ilə komponent public class MyService { private readonly ILogger _logger; public MyService(ILogger logger) // Konstruktor vasitəsilə injeksiya { _logger = logger; } public void DoSomething() { _logger.Log("Nəsə etmək."); } } -
Xüsusiyyət vasitəsilə injeksiya (Property Injection): Asılılıqlar ictimai xüsusiyyətlər vasitəsilə qurulur. Bu daha az üstünlük təşkil edir, çünki asılılığın qurulduğuna zəmanət vermir.
public class MyService { public ILogger Logger { get; set; } // Xüsusiyyət vasitəsilə injeksiya public void DoSomething() { Logger?.Log("Nəsə etmək."); // null yoxlaması } } -
Yöntəm vasitəsilə injeksiya (Method Injection): Asılılıqlar metod parametrləri kimi ötürülür. Bu, yalnız müəyyən bir metodun icrası üçün asılılıq lazım olduqda istifadə olunur.
public class MyService { public void DoSomething(ILogger logger) // Yöntəm vasitəsilə injeksiya { logger.Log("Nəsə etmək."); } }
DI çox vaxt DI konteyneri (Inversion of Control Container) vasitəsilə həyata keçirilir, hansı ki, obyektlərin həyat dövrünü idarə edir və onların asılılıqlarını həll edir. .NET-də məşhur DI konteynerləri: Microsoft.Extensions.DependencyInjection (daxil edilmiş), Autofac, Ninject, Castle Windsor.
DI, asan saxlanılan, test edilə bilən və genişlənə bilən tətbiqlər qurmaq üçün əsas prinsipdir.