Использование функции внедрения 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
  }
]
Другие вопросы по тегам