圆形依赖注入角度2

时间:2016-11-10 10:55:32

标签: angular dependency-injection circular-dependency

我一直在努力向对方注入$sdata['one'] = 'Some other value'; 。以下博客Circular Dependency in constructors and Dependency Injection在说明

时有点令人困惑
  

两个对象中的一个是隐藏另一个对象C

将Service类注入彼此时出现以下错误

  

无法解析PayrollService的所有参数:(SiteService,StorageService,   SweetAlertService,?)

$sdata['old']['one'] = 'Some other value'; 

您的意见和回答将受到很多赞赏。

由于

3 个答案:

答案 0 :(得分:25)

您可以通过注入Injector而不是导致循环依赖的服务之一来解决循环依赖关系

private payrollService:PayrollService;
constructor(/*private payrollService:PayrollService*/ injector:Injector) {
  setTimeout(() => this.payrollService = injector.get(PayrollService));
}

答案 1 :(得分:0)

在我的情况下(Ionic项目中的Angular 4)甚至在使用之前注入服务(在用户交互时)不起作用(启动时“相同”无法解析所有参数......)。

对我有用的是按名称注入(并因此提供)服务

所以在我的app模块中:

...
providers: [{provide: "MyServiceName", MyServiceClass}],
...

需要时:

const myService: MyServiceClass = injector.get("MyServiceName");
...

答案 2 :(得分:0)

我知道帖子很旧,但是无论如何,上述解决方案对我来说还是很有效的,因为我遇到了循环依赖问题,因此尽管上述解决方案中有一项更正,但我不得不使用注入器来避免创建中介服务进行通信

从Angular 5开始,我们需要使用:

提供者:[{提供:“ MyServiceName”,使用类: MyServiceClass}]

然后

injector.get('MyServiceName')

尽管get被弃用