2017-03-02 110 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('....'); 
    } 
}