首页 > 解决方案 > Angular APP_INITIALIZER 工厂中的 InjectionToken

问题描述

我正在尝试APP_INITIALIZER在我的 Angular 10 应用程序中创建一个,其中工厂有多个依赖项。一个依赖项是InjectionToken<string>,但我不能像使用构造函数那样注入它。我得到:

错误...
装饰器在此处无效。

以下是如何重现此行为(另请参阅此 StackBlitz 示例):

export const FOOBAR = new InjectionToken<string>('FOOBAR');

@Injectable({providedIn: 'root'})
export class FooService { dummy = 'value'; }

function initializerFactory(
  fooService: FooService,
  @Inject(FOOBAR) fooBar: string,
) {
  return () => {
    fooService.dummy = `Changed ${fooService.dummy}, added ${fooBar}`;
  }
}

然后在app.module

providers: [
  { provide: FOOBAR, useValue: 'token value' },
  { provide: APP_INITIALIZER, useFactory: initializerFactory, multi: true, deps: [FooService, FOOBAR] },
],

如何使用 AngularInject令牌放入工厂方法?

标签: angulartypescriptdependency-injection

解决方案


只需删除@Inject(...). 它们按照您列出它们的deps确切顺序“神奇地”注入,作为函数的参数。

所以这:

 {
      provide: APP_INITIALIZER,
      useFactory: initializerFactory,
      multi: true,
      deps: [FooService, FOOBAR]
 },

FooService作为第一个参数和FOOBAR第二个参数注入您的工厂。


推荐阅读