2017-03-02 10 views
0

Angular2エラーハンドラクラスを実装するカスタムエラーハンドラを開発しました。私のカスタムエラーハンドラは、ロガーサービスを使用してエラーを記録します。コードは次のように次のようになります。しかしAngular2の循環依存関係の問題

export class CustomErrorHandler implements ErrorHandler { 
    constructor(private logger: LoggerService) {} 

    handleError(error: any): void { 
     logger.error('....'); 
    } 
} 

、ロガーサービスはAngular2ルータを使用するので、私はカスタムエラーハンドラにロガーサービスを注入することはできません!上記のコードを実行すると、次の例外がスローされます。 Error: Provider parse errors:↵Cannot instantiate cyclic dependency!

+0

なぜロガーサービス利用ルータはいますか?サービスに関連するルートはありません。サービスはシングルトンであるはずです。 –

+0

ロガーサービスはリモートロガーを使用して別のオンラインサービスにログを送信するためです。 – Mohammad

答えて

1

あなたは循環依存の問題を回避するために、手動で注入する必要があります。

import { Injectable, Injector } from '@angular/core'; 
import { Logger } from '...'; 

@Injectable() 
export class CustomErrorHandler implements ErrorHandler { 
    constructor(private injector: Injector) {} 

    handleError(error: any): void { 
     const logger = this.injector.get(Logger); 
     logger.error('....'); 
    } 
} 
関連する問題