Sobes.tech
Middle

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.