Что такое 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-ключ для значений и интерфейсов без класса, с возможностью значения по умолчанию и подмены.