注入类数组



我有一个MetaManager类:

@Injectable()
export class MetaManager{
    constructor(private handlers:Handler[]){
        console.log(handlers);
    }
}

这个类需要一个Handler[]来注册为处理程序。然后,当我得到一些元数据时,我在处理程序数组中循环,看看哪一个可以处理我的元条目。

话虽如此,问题是我不能在main.ts中提供一个类数组作为config,以下是我尝试过的(但没有成功):

使用字符串条目(在MetaManager:中带有@Provide('HANDLERS')注释

`bootstrap(AppComponent, [MetaManager,provide('HANDLERS', {useValue: [DebugHandler]}) ]);`

使用接口提供处理程序:

export const HANDLERS: HandlerConfig = {handlers: [<Handler>DebugHandler]};
bootstrap(AppComponent, [MetaManager, provide(HandlerConfig, {useValue: HANDLERS}) ]);

使用Handler[]类提供程序:

bootstrap(AppComponent, [MetaManager, provide(Handler[], [DebugHandler])]);

我想提供一个类数组,因为MetaManager将来需要有多个处理程序、通知、错误等。

编辑:

使用多提供者给我一个No provider for Array! (ApiService -> MetaManager -> Array)错误:

meta-manager.ts:

@Injectable()
export class MetaManager{
    constructor(private handlers:Handler[]){
        console.log(handlers);
    }
}

main.ts:

bootstrap(AppComponent,
    [   MetaManager,
        provide(Handler, {useClass: DebugHandler, multi: true}),
        provide(Handler, {useClass: NotificationHandler, multi: true})]);

在为Handler类注册提供程序时,可以使用multi属性:

bootstrap(AppComponent, [
  MetaManager,
  provide(Handler, { useClass: DebugHandler, multi: true }),
  provide(Handler, { useClass: OtherHandler, multi: true })
]);

通过这种方式,您将能够以这种方式注入:

@Injectable()
export class MetaManager{
  constructor(@Inject(Handler) private handlers:Handler[]){
    console.log(handlers);
  }
}

以下是相应的plunkr:https://plnkr.co/edit/UBIvWfOvAmo4XO2ohbID?p=preview.这篇文章可能会引起你的兴趣:

  • http://blog.thoughtram.io/angular2/2015/11/23/multi-providers-in-angular-2.html

相关内容

  • 没有找到相关文章

最新更新