注入 class 数组
Inject class array
我有一个 MetaManager class:
@Injectable()
export class MetaManager{
constructor(private handlers:Handler[]){
console.log(handlers);
}
}
此 class 需要 Handler[]
才能注册为处理程序。然后,当我获得一些元数据时,我在我的处理程序数组中循环以查看哪个可以处理我的元条目。
话虽如此,问题是我无法在 main.ts 中提供一个 class 的数组作为配置,这是我尝试过的方法(以及无效的方法):
使用字符串条目(在 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[]
class 提供商:
bootstrap(AppComponent, [MetaManager, provide(Handler[], [DebugHandler])]);
我想提供一个class数组,因为MetaManager
以后需要有多个Handler,通知,错误等等...
编辑:
使用多提供商给我一个 No provider for Array! (ApiService -> MetaManager -> Array)
错误:
元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
class 注册提供商时使用 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。
这篇文章可能会让您感兴趣:
我有一个 MetaManager class:
@Injectable()
export class MetaManager{
constructor(private handlers:Handler[]){
console.log(handlers);
}
}
此 class 需要 Handler[]
才能注册为处理程序。然后,当我获得一些元数据时,我在我的处理程序数组中循环以查看哪个可以处理我的元条目。
话虽如此,问题是我无法在 main.ts 中提供一个 class 的数组作为配置,这是我尝试过的方法(以及无效的方法):
使用字符串条目(在 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[]
class 提供商:
bootstrap(AppComponent, [MetaManager, provide(Handler[], [DebugHandler])]);
我想提供一个class数组,因为MetaManager
以后需要有多个Handler,通知,错误等等...
编辑:
使用多提供商给我一个 No provider for Array! (ApiService -> MetaManager -> Array)
错误:
元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
class 注册提供商时使用 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。 这篇文章可能会让您感兴趣: