PassFront
  1. PassFront
  2. База знаний
  3. Внедрение зависимостей

Что такое InjectionToken и когда он нужен?

Внедрение зависимостей

`InjectionToken` — ключ для внедрения значений, у которых нет класса: конфигурации, констант, интерфейсов.

Проблема

Интерфейсы TypeScript исчезают после компиляции, и использовать их как токен DI нельзя. Для строк и объектов конфигурации тоже нужен идентификатор.

Решение

export interface AppConfig { apiUrl: string; }

export const APP_CONFIG = new InjectionToken<AppConfig>('APP_CONFIG', {
  providedIn: 'root',
  factory: () => ({ apiUrl: '/api' }),
});

// переопределение в приложении
bootstrapApplication(AppComponent, {
  providers: [{ provide: APP_CONFIG, useValue: { apiUrl: 'https://prod.example.com' } }],
});

// использование
const config = inject(APP_CONFIG);

Применение

  • Конфигурация окружения и адреса API.
  • Подмена реализации: в тестах вместо настоящего сервиса подставляют заглушку через useClass или useValue.
  • Несколько провайдеров под одним токеном с multi: true (например, HTTP-перехватчики).

Коротко для собеседования

InjectionToken даёт DI-ключ для значений и интерфейсов без класса, с возможностью значения по умолчанию и подмены.

Другие вопросы раздела