我在Angular的服务中有一个循环依赖(v4,使用CLI)。我知道应该避免循环依赖;只是为了论证而假设我不能影响那个。
我已经阅读了许多建议使用Injector
来解决此问题的示例。在我的情况下,它不起作用 - 我仍然会收到Can't resolve all parameters for MyService...
错误。
即使我只是在这样的违规服务中创建一个永远不会被调用的方法:
import { Injectable, Injector } from '@angular/core';
import { MyService } from '../my.service';
@Injectable()
export class SomeService{
constructor(private injector:Injector){}
test() {//I don't call this anywhere
setTimeout(() => this.injector.get(MyService).doStuff());
}
}
......它仍然会产生错误。如果我只是在test()
方法中注释掉一行,那么一切正常。
我甚至以相同的方式使用SomeService
- 使用injector.get
调用它 - 因此injector.get
调用是唯一一个在任一方向上产生循环依赖的东西。
为什么这对很多人有效但我仍然得到错误?这是否与Angular CLI的使用有关? ......或者Angular 4改变了什么?
This plunker helps demonstrate the issue.请理解这是从大型应用程序中获取的,这个最小的示例本身就表明设计不佳 - 但它暴露了这个问题。