我想调用一个调用服务的服务。两者都是注入的,并且使用相同的接口/抽象类。
export abstract class Service {
abstract getTitle(): string;
}
@Injectable({
providedIn: "root"
})
export class BService extends Service {
getTitle() {
return "from B";
}
}
@Injectable({
providedIn: "root"
})
export class AService extends Service {
constructor(private service: Service) {
super()
}
getTitle() {
return this.service.getTitle();
}
}
@NgModule({
providers: [{ provide: Service, useClass: BService }]
})
export class AModule {}@NgModule({
imports: [BrowserModule, FormsModule, AModule],
declarations: [AppComponent, HelloComponent],
bootstrap: [AppComponent],
providers: [{ provide: Service, useClass: AService }]
})
export class AppModule {}export class HelloComponent {
title: string;
constructor(service: Service) {
this.title = service.getTitle();
}我得到了:
Provider parse errors:
Cannot instantiate cyclic dependency! Service ("[ERROR ->]"): in NgModule AppModule in ./AppModule@-1:-1https://stackblitz.com/edit/angular-tqoena
如何才能在不重复的情况下实现这一点呢?
发布于 2020-10-19 20:08:49
将AppModule.ts更改为以下内容
@NgModule({
imports: [BrowserModule, FormsModule, AModule],
declarations: [AppComponent, HelloComponent],
bootstrap: [AppComponent],
providers: [AService] // <-- Just provide the service
})
export class AppModule {}此外,AService不需要扩展抽象服务
@Injectable({
providedIn: "root"
})
export class AService {
constructor(private service: Service) {
}
getTitle() {
return this.service.getTitle();
}
}请参阅工作示例here
更新21。2020年10月
,我想要调用一个调用服务的服务。两者都是注入的,并且使用相同的接口/抽象类。
这意味着
ServiceA extends Service
ServiceB extends Service
ServiceB is being injected into ServiceA
ServiceA will be called from Component
(ServiceB will also be called from Component)上面的场景是通过here实现的
https://stackoverflow.com/questions/64426966
复制相似问题