[Основи шаблонів проектування] Впровадження залежностей

Цей шаблон проектування використовується для реалізації Інверсії контролю.

Інверсія контролю (IoC) — це принцип проектування, за якого компонент програмного забезпечення отримує свої залежності з зовнішнього джерела, а не створює їх самостійно.

Впровадження залежностей дозволяє створювати залежні об'єкти поза компонентом, який їх потребує, і надає ці об'єкти різними способами, забезпечуючи слабке зв'язування.

Слабке зв'язування — це підхід до проектування інтерфейсів між модулями для зменшення їх взаємозалежностей.

Це допомагає підтримувати код підтримуваним, перезавантажуваним та модульним протягом етапу впровадження програмного забезпечення.

Деякі ключові терміни:

Залежність: Об'єкт, від якого залежить інший компонент.
Інжектор: Компонент, відповідальний за впровадження залежностей.
Клієнт: Компонент, який отримує залежний об'єкт.

Приклад коду: “Служба логування

public interface Logger {  
 public void Log(string LogMessage);  
}  

public class ConsoleLogger : Logger {  

 public void Log(string LogMessage) {  
 Console.WriteLine("[ConsoleLogger] -> " + LogMessage);  
 }  
}  

public class UserService {  
 private Logger LoggerObj;  

 public UserService(Logger LoggerObj) {  
 this.LoggerObj = LoggerObj;  
 }  
 public void SetUsername(string Username) {  
 this.LoggerObj.Log("Username set to " + Username);  
 }  
}  

public class DependencyInjection {  
 public static void Main(string[] args) {  
 ConsoleLogger ConsoleLogger = new();  
 UserService UserService = new(ConsoleLogger);  
 UserService.SetUsername("Muhammad Ahmed");  
 }  
}

UserService залежить від Logger. Замість того, щоб створювати логер всередині UserService, ми впроваджуємо його через конструктор. Це дозволяє нам легко замінювати реалізацію логера без змін у класі UserService — досягаємо модульності, підтримуваності та перезавантажуваності.

Кінець.

Перекладено з: [Design Patterns 101] Dependency Injection