Использование функции внедрения Angular с APP_INITIALIZER
В Ivy Angular представил функцию nice .Согласно документации, функцию можно использовать «с завода провайдера» со следующим примером:
providers: [
{
provide: Car,
useFactory: () => {
// OK: a class factory
const engine = inject(Engine);
return new Car(engine);
}
}
]
Это заставляет меня поверить, что теперь я могу конвертировать свои старые s:
providers: [
{
provide: APP_INITIALIZER,
useFactory: (engine: Engine) => () => engine.start(),
deps: [Engine],
multi: true
}
]
используяinject
функцию к чему-то более простому, например:
providers: [
{
provide: APP_INITIALIZER,
useFactory: () => () => inject(Engine).start(),
multi: true
}
]
Однако это не удается, и я получаю следующее сообщение об ошибке:
Ошибка: NG0203: inject() необходимо вызывать из контекста внедрения, такого как конструктор, фабричная функция, инициализатор поля или функция, используемая с
EnvironmentInjector#runInContext
.
Это уже не фабричный контекст при использованииAPP_INITIALIZER
? Или в чем здесь проблема?
1 ответ
Похоже, отсутствует функция, контекст существует только в функции верхнего уровня.
Это рабочий пример:
providers: [
{
provide: APP_INITIALIZER,
useFactory: () => {
const engine = inject(Engine);
return () => engine.start();
},
multi: true
}
]
Или
providers: [
{
provide: APP_INITIALIZER,
useFactory: () => {
inject(Engine).start();
return () => {};
},
multi: true
}
]