我一直在努力向对方注入$sdata['one'] = 'Some other value';
。以下博客Circular Dependency in constructors and Dependency Injection在说明
两个对象中的一个是隐藏另一个对象C
将Service类注入彼此时出现以下错误
无法解析PayrollService的所有参数:(SiteService,StorageService, SweetAlertService,?)
$sdata['old']['one'] = 'Some other value';
您的意见和回答将受到很多赞赏。
由于
答案 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被弃用