Цей шаблон проектування використовується для реалізації Інверсії контролю.
Інверсія контролю (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