რისთვის გამოიყენება დამოკიდებულებების შეყვანა (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 — җиңел тотрыклы, тестлау мөмкинлеге булган һәм киңәйтелә торган программалар төзүнең төп принцибы.