Angular APP_INITIALIZER 工厂中的 InjectionToken

Jer*_*oen 3 dependency-injection typescript angular

我正在尝试在我的 Angular 10 应用程序中创建一个APP_INITIALIZER,其中工厂具有多个依赖项。一个依赖项是 an 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}`;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在app.module

providers: [
  { provide: FOOBAR, useValue: 'token value' },
  { provide: APP_INITIALIZER, useFactory: initializerFactory, multi: true, deps: [FooService, FOOBAR] },
],
Run Code Online (Sandbox Code Playgroud)

如何使用 Angular 将Inject令牌添加到工厂方法中

Jer*_*oen 5

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

所以这:

 {
      provide: APP_INITIALIZER,
      useFactory: initializerFactory,
      multi: true,
      deps: [FooService, FOOBAR]
 },
Run Code Online (Sandbox Code Playgroud)

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