Ответ
Внедрение зависимостей можно выполнять на нескольких уровнях:
- Конструктор (Constructor Injection) - самый распространённый способ. Зависимости передаются через параметры конструктора.
class UserService {
constructor(private db: Database) {}
}
- Сеттеры (Setter Injection) - зависимости устанавливаются через методы-сеттеры.
class AuthService {
private logger: Logger;
setLogger(logger: Logger) {
this.logger = logger;
}
}
-
Интерфейсы (Interface Injection) - зависимость внедряется через специальный интерфейс.
-
Поля класса (Property Injection) - прямое присвоение свойств (менее предпочтительный способ).
Во фронтенде DI часто реализуется через:
- Ручное внедрение (как в примерах выше)
- Фреймворки (Angular имеет встроенный DI)
- Контейнеры зависимостей (InversifyJS, Awilix)