gpt4 book ai didi

angular - 注入(inject)类数组

转载 作者:行者123 更新时间:2023-12-05 08:57:08 28 4
gpt4 key购买 nike

我有一个 MetaManager 类:

@Injectable()
export class MetaManager{

constructor(private handlers:Handler[]){
console.log(handlers);
}
}

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

话虽如此,问题是我无法在 main.ts 中提供类数组作为配置,这是我尝试过的方法(但没有奏效):

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

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

使用接口(interface)提供处理程序:

export const HANDLERS: HandlerConfig = {handlers: [<Handler>DebugHandler]};

bootstrap(AppComponent, [MetaManager, provide(HandlerConfig, {useValue: HANDLERS}) ]);

使用 Handler[] 类提供者:

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

我想提供一个类数组,因为MetaManager以后需要有多个Handler,通知,错误等等...

编辑:

使用多提供者给我一个 Array 没有提供者! (ApiService -> MetaManager -> 数组) 错误:

元管理器.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 })
]);

这样,您将能够以这种方式注入(inject):

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

这是相应的plunkr:https://plnkr.co/edit/UBIvWfOvAmo4XO2ohbID?p=preview .这篇文章可能会让您感兴趣:

关于angular - 注入(inject)类数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36205892/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com