Sobes.tech
Middle

რისთვის გამოიყენება დამოკიდებულებების შეყვანა (Dependency Injection)?

sobes.tech AI

პასუხი AI-სგან

Зависимостарының инъекциясе (Dependency Injection, DI) — программаның компонентлары арасындагы бәйлелілікті идарә итү өчен кулланыла.

DI-ның төп максатлары:

  • Бәйлелелекне киметү (Coupling): Компонентлар үз бәйлелеген турыдан-туры тудырмый, ә тыштан ала. Бу компонентларны бәйсезрәк итә һәм аларны кабат куллануны җиңеләйтә.
  • Тестлау мөмкинлеген арттыру: Аерым компонентларны изоляцияләү җиңелрәк, чөнки реаль бәйлелектәр урынына mock объектлар яки алмашлар кулланырга мөмкин.
  • Гибкость һәм киңәйтелүчәнлекне арттыру: Бәйлелектәрнең реализацияләрен үзгәртмичә алмаштыру җиңелрәк.
  • Конфигурацияне гадиләштерү: Бәйлелектәр үзәкләштерелгән рәвештә көйләнергә мөмкин, мәсәлән, программаны эшләтеп җибәргәндә.

DI-ның төп ысуллары:

  • Конструктор аша кертү (Constructor Injection): Бәйлелектәр конструкторга параметрлар буларак тапшырыла. Бу иң киң таралган һәм тәкъдим ителгән ысул, чөнки ул объектны төзегәндә барлык кирәкле бәйлелектәрнең булуын гарантияли.

    // Бәйлелек
    public interface ILogger
    {
        void Log(string message);
    }
    
    // бәйлелеге белән компонент
    public class MyService
    {
        private readonly ILogger _logger;
    
        public MyService(ILogger logger) // Конструктор аша кертү
        {
            _logger = logger;
        }
    
        public void DoSomething()
        {
            _logger.Log("Doing something.");
        }
    }
    
  • Майда аша кертү (Property Injection): Бәйлелектәр җәмәгать майда аша куела. Бу азрак тәкъдим ителә, чөнки ул бәйлелектәрнең куелуын гарантиялми.

    public class MyService
    {
        public ILogger Logger { get; set; } // Майда аша кертү
    
        public void DoSomething()
        {
            Logger?.Log("Doing something."); // Null тикшерү
        }
    }
    
  • Метод аша кертү (Method Injection): Бәйлелектәр метод параметры буларак тапшырыла. Бу конкрет бер метод өчен бәйлелектәр кирәк булган вакытта кулланыла.

    public class MyService
    {
        public void DoSomething(ILogger logger) // Метод аша кертү
        {
            logger.Log("Doing something.");
        }
    }
    

Ди еш кына DI-контейнерлар белән тормышка ашырыла, алар объектларның тормыш циклларын идарә итә һәм бәйлелектәрне чишә. Мисаллар: Microsoft.Extensions.DependencyInjection (урнаштырылган), Autofac, Ninject, Castle Windsor.

DI — җиңел тотрыклы, тестлау мөмкинлеге булган һәм киңәйтелә торган программалар төзүнең төп принцибы.