Ответ
Внедрение зависимостей (DI) — это паттерн, при котором зависимости передаются объекту извне, а не создаются внутри. Основные способы:
- Через конструктор (наиболее предпочтительный):
class UserService {
constructor(userRepository) {
this.userRepository = userRepository;
}
}
- Через сеттеры (менее явный, но гибкий):
class UserService {
setRepository(repo) {
this.userRepository = repo;
}
}
- Через интерфейс/контекст (например, в React через Context API):
const UserContext = createContext();
<UserContext.Provider value={userService}>
<Component />
</UserContext.Provider>
- DI-контейнеры (в Angular, NestJS):
@Injectable()
class UserService {
constructor(private userRepository: UserRepository) {}
}
Преимущества DI: тестируемость, гибкость, соблюдение принципа инверсии зависимостей (DIP).