Angular DI与自定义HTTP和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(

我正在尝试实现一个ConfigService,以便为项目中的正确环境检索正确的配置。我现在遇到了循环依赖

(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
实际上打破了这个循环,其他东西只是这个循环的样板。