Sup*_*miu 1 angular2-injection angular
我有一个MetaManager类:
@Injectable()
export class MetaManager{
constructor(private handlers:Handler[]){
console.log(handlers);
}
}
Run Code Online (Sandbox Code Playgroud)
这个类需要Handler[]注册为处理程序.当我得到一些元数据时,我在我的处理程序数组中循环以查看哪个可以处理我的元条目.
话虽如此,问题是我无法在main.ts中提供一个类数组作为配置,这是我尝试过的(以及什么不起作用):
使用String条目(@Provide('HANDLERS')在MetaManager中使用注释:
`bootstrap(AppComponent, [MetaManager,provide('HANDLERS', {useValue: [DebugHandler]}) ]);`
Run Code Online (Sandbox Code Playgroud)
使用接口提供处理程序:
export const HANDLERS: HandlerConfig = {handlers: [<Handler>DebugHandler]};
bootstrap(AppComponent, [MetaManager, provide(HandlerConfig, {useValue: HANDLERS}) ]);
Run Code Online (Sandbox Code Playgroud)
使用Handler[]类提供者:
bootstrap(AppComponent, [MetaManager, provide(Handler[], [DebugHandler])]);
Run Code Online (Sandbox Code Playgroud)
我想提供一个类数组,因为MetaManager将来需要有多个Handler,通知,错误等...
编辑:
使用多提供程序给我一个No provider for Array! (ApiService -> MetaManager -> Array)错误:
元manager.ts:
@Injectable()
export class MetaManager{
constructor(private handlers:Handler[]){
console.log(handlers);
}
}
Run Code Online (Sandbox Code Playgroud)
main.ts:
bootstrap(AppComponent,
[ MetaManager,
provide(Handler, {useClass: DebugHandler, multi: true}),
provide(Handler, {useClass: NotificationHandler, multi: true})]);
Run Code Online (Sandbox Code Playgroud)
您可以在multi为Handler类注册提供程序时使用该属性:
bootstrap(AppComponent, [
MetaManager,
provide(Handler, { useClass: DebugHandler, multi: true }),
provide(Handler, { useClass: OtherHandler, multi: true })
]);
Run Code Online (Sandbox Code Playgroud)
这样,您就可以这样注入:
@Injectable()
export class MetaManager{
constructor(@Inject(Handler) private handlers:Handler[]){
console.log(handlers);
}
}
Run Code Online (Sandbox Code Playgroud)
这是相应的plunkr:https://plnkr.co/edit/UBIvWfOvAmo4XO2ohbID ? p = preview .这篇文章可能会让您感兴趣
| 归档时间: |
|
| 查看次数: |
1705 次 |
| 最近记录: |