2016-09-19 73 views
1

嘗試向我的CustomExceptionHandler注入服務時,Angular注入器找不到該服務。當加載CustomExceptionHandler時,Angular 2注入器無法找到服務

錯誤:Uncaught Can't resolve all parameters for CustomExceptionHandler: (?).

的設置:

CustomExceptionHandler

import { ExceptionHandler } from '@angular/core'; 

import { ServiceA } from '../services/a.service'; 

export class CustomExceptionHandler extends ExceptionHandler { 

    constructor(private serviceA: ServiceA) { 
    super(null, null); 
    } 

    call(error, stackTrace = null, reason = null) { 
     //do something with the service 
    } 
} 

app.module

@NgModule({ 
    declarations: [ 
    ... 
    ], 
    imports: [ 
    ... 
    ], 
    providers: [ 
    ServiceA, 
    { provide: ExceptionHandler, useClass: CustomExceptionHandler }, 
    ], 
    bootstrap: [AppComponent], 
}) 
export class AppModule { } 
+0

'進口{}服務從 '../服務/ a.service';'也許應該是'進口{ '../services/a.service';'(缺少服務名稱中的'A')ServiceA} –

回答

1

更新ExceptionHandler更名爲ErrorHandlerhttps://stackoverflow.com/a/35239028/217408

orgiginal

添加@Injectable()您CustomExceptionHandler類。

添加CustomExceptionHandler作爲app.module.ts你的供應商的另一個問題:

@NgModule({ 
    declarations: [ 
    ... 
    ], 
    imports: [ 
    ... 
    ], 
    providers: [ 
    ServiceA, 
    CustomExceptionHandler, 
    { provide: ExceptionHandler, useClass: CustomExceptionHandler }, 
    ], 
    bootstrap: [AppComponent], 
}) 
export class AppModule { } 
+0

謝謝你甘特和ade你的答案。這是它們的組合。您需要添加@Injectable(),並且您需要將其列爲app.module.ts中的普通提供者,並將其列爲useClass以重寫ExceptionHandler。這給我留下了一個難以接受的答案。無論哪種類型的組合都可以得到它。再次感謝! –

1

你需要CustomExceptionHandler及其依賴添加到providers還有:

@NgModule({ 
    declarations: [ 
    ... 
    ], 
    imports: [ 
    ... 
    ], 
    providers: [ 
    ServiceA, 
    CustomExceptionHandler, 
    { provide: ExceptionHandler, useClass: CustomExceptionHandler }, 
    ], 
    bootstrap: [AppComponent], 
}) 
export class AppModule { } 
+0

我修改了錯誤:'Uncaught無法解析所有參數爲CustomExceptionHandler:(?)。' –

+0

這不是問題,問題依然存在。感謝你的時間,雖然 –

+0

感謝你甘特和ade你的答案。這是它們的組合。您需要添加@Injectable(),並且您需要將其列爲app.module.ts中的普通提供者,並將其列爲useClass以重寫ExceptionHandler。這給我留下了一個難以接受的答案。無論哪種類型的組合都可以得到它。再次感謝! –