2016-09-19 84 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。这给我留下了一个难以接受的答案。无论哪种类型的组合都可以得到它。再次感谢! –

相关问题