DI — это то, что позволяет проекту оставаться масштабируемым и удобным. Вместо того чтобы руками создавать объекты, мы говорим фреймворку: «подкидывай зависимости сам»
🕺 Базовая идея
В Nest.js всё крутится вокруг провайдеров. Любой сервис, репозиторий или клиент можно зарегистрировать и потом внедрять в другие классы через конструктор
@Injectable()
export class UsersService {
constructor(private readonly repo: UsersRepo) {}
}
Nest сам найдёт UsersRepo, создаст его экземпляр и передаст в сервис
📦 Scopes (области жизни провайдера)
Нередко спрашивают на собесах, поэтому важно запомнить все скоупы
По умолчанию все провайдеры singleton — один экземпляр на всё приложение. Но иногда этого мало.
Nest поддерживает три области жизни:
1) Singleton (по умолчанию) — создаётся один раз при старте приложения
2) Request — новый экземпляр для каждого входящего запроса.
3) Transient — новый экземпляр при каждом внедрении
Request и Transient будут дороже по памяти, особенно под нагрузкой
🚀 Пост Guru Node.js: @DemetraIT