intermediate

NestJS providers

Моделируйте injectable services, repositories, factories, tokens, scopes и lifecycle hooks, не скрывая domain boundaries.

Providers — injectable classes (или values/factories) в `providers` модуля. `@Injectable()` помечает class для DI. Services, repositories и adapters — типичные providers.

					@Injectable()
export class UsersService {
  constructor(private readonly repo: UsersRepository) {}

  async create(dto: CreateUserDto) {
    return this.repo.save(dto);
  }
}
				

Custom providers: `useClass`, `useValue`, `useFactory` и injection tokens для interfaces. Scope по умолчанию — singleton на module; `Scope.REQUEST` — instance на HTTP request; использовать осторожно из-за стоимости.

На интервью: lifetime provider, когда factories лучше classes, как repositories скрывают persistence от services.

Типовые ошибки: request-scoped providers везде, один provider в нескольких modules без export, services со знанием HTTP.

Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.

Чеклист:

  • Domain services с `@Injectable()`.
  • Persistence за repository providers.
  • Singleton scope, если не нужен request context.
  • Tokens для interface → implementation.