Angular DI与自定义HTTP和ConfigService具有循环依赖关系
我正在尝试实现一个ConfigService,以便为项目中的正确环境检索正确的配置。我现在遇到了循环依赖Angular DI与自定义HTTP和ConfigService具有循环依赖关系,angular,typescript,Angular,Typescript,我正在尝试实现一个ConfigService,以便为项目中的正确环境检索正确的配置。我现在遇到了循环依赖 (index):28 Error: (SystemJS) Provider parse errors: Cannot instantiate cyclic dependency! Http: in NgModule AppModule Error: Provider parse errors: 我已经研究了代码,在我看来,存在问题: 自定义HTTP constructor(
(index):28 Error: (SystemJS) Provider parse errors:
Cannot instantiate cyclic dependency! Http: in NgModule AppModule
Error: Provider parse errors:
我已经研究了代码,在我看来,存在问题:
自定义HTTP
constructor(backend: XHRBackend, options: RequestOptions, public spinnerService: SpinnerService, public exceptionService: ExceptionService, public configService: ConfigService)
例外服务
constructor(private _notificationService: NotificationService, private _spinnerService: SpinnerService, private _configService: ConfigService, private _router: Router)
配置服务
constructor(private http: Http) {}
如您所见,我在这张图中展示了循环依赖性(没有任何好的约定):
我现在的问题是,如何修复它?我听说过Injector
,但我不确定在这种情况下是否能真正使用它
提前感谢您的回答。DI无法解析循环依赖关系。解决方法是注入注入器并强制获取实例:
@Injectable()
类配置服务{
私有http:http;
建造师(注入器:注入器){
setTimeout(()=>this.http=injector.get(http);
}
}
Angular 4是否有另一种方法?那就是Angular 2-4I希望在这方面有一个改进。没有计划改变它。这需要改变构造函数在TypeScript中的工作方式,没有人希望它们被改变。不要期望在这里有改变。因为new ConfigService()
需要返回,只有在返回之后才能injector.get(Http)
创建一个依赖于ConfigService
的Http
实例。在ConfigService
的构造函数中,injector.get(Http)
不可能获取实例。setTimeout()
允许完成构造函数,并且只在以后请求Http
类。这个setTimeout
实际上打破了这个循环,其他东西只是这个循环的样板。