2016-11-29 12 views
15

私はConfigServiceを実装して、プロジェクトの適切な環境に適した構成を取得しようとしています。私は現在、私はコードを探求してきたし、問題がある、私の意見ではカスタムHTTPとConfigServiceの循環依存性を持つDI

(index):28 Error: (SystemJS) Provider parse errors: 
    Cannot instantiate cyclic dependency! Http: in NgModule AppModule 
    Error: Provider parse errors: 

循環依存に遭遇しています:

CustomHttp

constructor(backend: XHRBackend, options: RequestOptions, public spinnerService: SpinnerService, public exceptionService: ExceptionService, public configService: ConfigService) 

ExceptionService

constructor(private _notificationService: NotificationService, private _spinnerService: SpinnerService, private _configService: ConfigService, private _router: Router) 

ConfigService

constructor(private http: Http) {} 

あなたが見ることができるように、私は(何か良い慣例なし)この図に示す循環依存関係をしました:

enter image description here

私の質問は、どのようにそれを修正しますか?私はInjectorについて聞いたことがありますが、私は実際にこの文脈でそれを使うことができるとは確信していません。

ご回答いただきありがとうございます。

答えて

24

DIは循環依存性を解決できません。回避策は、インジェクタを注入して、必要に応じてインスタンスを取得することです。

@Injectable() 
class ConfigService { 
    private http: Http; 
    constructor(injector:Injector) { 
    setTimeout(() => this.http = injector.get(Http); 
    } 
} 
+0

また、角度4の別の方法がありますか? – CSchulz

+0

これは角度2 - 4のためです –

+0

私はその間に改善があると期待していました。 – CSchulz