加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular2如何将所有接口实现注入服务列表?

发布时间:2020-12-17 18:10:11 所属栏目:安全 来源:网络整理
导读:我正在用Typescript学习Angular2,我遇到了问题. 我有两个classe,imprements相同的界面.如何将它们作为列表注入服务? 我读到了opaquetoken https://angular.io/docs/ts/latest/guide/dependency-injection.html#opaquetoken 但我不知道我是否需要使用它以及
我正在用Typescript学习Angular2,我遇到了问题.

我有两个classe,imprements相同的界面.如何将它们作为列表注入服务?

我读到了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));
  }

}

谢谢你的帮助 !

解决方法

您需要将阵列添加为提供程序,或者在提供程序配置中使用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,]
})

第二个可能更好,因为你让Angular创建它们,允许它们在需要时注入自己的依赖项.

然后你只需要在注入时使用CHECKERS标记

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读