首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Angular服务通过相同的接口/抽象类=>循环依赖来调用服务

Angular服务通过相同的接口/抽象类=>循环依赖来调用服务
EN

Stack Overflow用户
提问于 2020-10-19 20:03:18
回答 1查看 30关注 0票数 0

我想调用一个调用服务的服务。两者都是注入的,并且使用相同的接口/抽象类。

代码语言:javascript
运行
复制
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 {}
代码语言:javascript
运行
复制
@NgModule({
  imports: [BrowserModule, FormsModule, AModule],
  declarations: [AppComponent, HelloComponent],
  bootstrap: [AppComponent],
  providers: [{ provide: Service, useClass: AService }]
})
export class AppModule {}
代码语言:javascript
运行
复制
export class HelloComponent {
  title: string;
  constructor(service: Service) {
    this.title = service.getTitle();
  }

我得到了:

代码语言:javascript
运行
复制
Provider parse errors:
Cannot instantiate cyclic dependency! Service ("[ERROR ->]"): in NgModule AppModule in ./AppModule@-1:-1

https://stackblitz.com/edit/angular-tqoena

如何才能在不重复的情况下实现这一点呢?

EN

回答 1

Stack Overflow用户

发布于 2020-10-19 20:08:49

将AppModule.ts更改为以下内容

代码语言:javascript
运行
复制
@NgModule({
  imports: [BrowserModule, FormsModule, AModule],
  declarations: [AppComponent, HelloComponent],
  bootstrap: [AppComponent],
  providers: [AService] // <-- Just provide the service
})
export class AppModule {}

此外,AService不需要扩展抽象服务

代码语言:javascript
运行
复制
@Injectable({
  providedIn: "root"
})
export class AService {
  constructor(private service: Service) {
  }
  getTitle() {
    return this.service.getTitle();
  }
}

请参阅工作示例here

更新21。2020年10月

,我想要调用一个调用服务的服务。两者都是注入的,并且使用相同的接口/抽象类。

这意味着

代码语言:javascript
运行
复制
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实现的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64426966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档