gpt4 book ai didi

Angular2 如何将所有接口(interface)实现注入(inject)到列表服务中?

转载 作者:太空狗 更新时间:2023-10-29 17:28:07 25 4
gpt4 key购买 nike

我正在使用 Typescript 学习 Angular2,但遇到了问题。

我有两个实现相同接口(interface)的类。如何将它们作为列表注入(inject)到服务中?

我阅读了有关 opaquetoken 的信息 https://angular.io/docs/ts/latest/guide/dependency-injection.html#opaquetoken

但我不知道是否需要使用它以及如何使用它。

export interface CheckerInterface {
check(text : string) : boolean
}

export class Checker1 implements CheckerInterface {
check(text : string) : boolean {
//do something
return true;
}

export class Checker2 implements CheckerInterface {
check(text : string) : boolean {
//do something
return true;
}

@Injectable()
export class Service {

constructor(private checkers: CheckerInterface[]) { //??
checkers.foreach( checker => checker.check(somestring));
}

}

感谢您的帮助!

最佳答案

您需要将数组添加为提供者,或者在 provider 配置中使用 multi: true

export const CHECKERS = new OpaqueToken('one');

@NgModule({
providers: [
{ provide: CHECKERS, useValue: [new Checker1(), new Checker2()] },
]
})

或者

@NgModule({
providers: [
{ provide: CHECKERS, useClass: Checker1, multi: true },
{ provide: CHECKERS, useClass: Checker2, multi: true },
]
})

第二个可能更可取,因为您让 Angular 创建它们,允许它们在需要时注入(inject)自己的依赖项。

然后你只需要在注入(inject)时使用CHECKERS token

import { Inject } from '@angular/core';
import { CHECKERS } from './wherever';

constructor(@Inject(CHECKERS) private checkers: CheckerInterface[]) {

更新

从 Angular 4 开始,InjectionToken用于代替 OpaqueToken

export const CHECKERS = new InjectionToken<CheckerInterface>('CheckerInterface');

关于Angular2 如何将所有接口(interface)实现注入(inject)到列表服务中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43049643/

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