Angular:如何注入抽象服务的多个实例

问题描述

我对Angular有点陌生,试图理解高级开发人员编写的代码。如果我不遵守标准的交流习惯和言语,请原谅我。

我有一个抽象类abstractDatService和一个抽象方法getEntities(),它们的实现类分别为impl1impl2

实现类如下:

@Injectable()
export class impl1 extends abstractDatService{
  
  private entities: Modal[] = [
    {
      id: 1,type: "a",name: "a1"
    },{
      id: 2,name: "a2"
    }
  ];

  public getEntities(): Observable<Modal[]> {
    return of(this.entities);
  }
}

现在,在我的模块中,我试图将服务注入为:

  providers: [
    {
      provide: abstractDatService,useClass: impl1
    },{
      provide: abstractDatService,useClass: impl2
    }
  ]

在这种情况下,当我尝试获取实体时,它们仅返回impl2类的实体,而不返回impl1类的实体

我希望实现将两者都返回。

有人可以帮我解决这个问题吗?

编辑:

详细说明

我具有用于显示数据的组件

HEAD1
Data from impl1 // this line is a common component in which there is a ngFor on observable returned.

HEAD2
Data from impl2 // this line is a common component in which there is a ngFor on observable returned.

通用组件是显示来自impl1的数据和来自impl2的数据的组件。

解决方法

根据评论

请详细说明。您想要两者都意味着什么?您是说要让注入的服务是两者的组合,以便getEntities返回两者的元素吗?

是的,我想以某种方式注入模型impl1和impl2的数据

您需要更改2件事。

第一:您的提供商定义包括multi: true

providers: [
    {
      provide: AbstractionService,useClass: Impl1Service,multi: true,},{
      provide: AbstractionService,useClass: Impl2Service,}
  ]

2nd:处理带有数组的多次注入

 constructor(@Inject(AbstractionService) impls: AbstractionService[]) {
    const obs$ = impls.map(impl => impl.getEntities());

    combineLatest(obs$).subscribe(console.log);
  }

在stackblitz上进行检查:https://stackblitz.com/edit/angular-ivy-pwysue?file=src/app/app.module.ts

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...