1

我做了一个扩展的ExceptionHandler在角2类我引导这个没有提供例外:当试图延长角2 exceptionHandler的类

bootstrap(App, [ 
    APP_ROUTER_PROVIDERS, 
    HTTP_PROVIDERS, 
    provide(ExceptionHandler, { useClass: CustomExceptionHandler }), 

这工作得很好,当我尝试注入出现的问题我的API服务。我尝试这样做:

@Injectable() 
export class CustomExceptionHandler extends ExceptionHandler { 

    constructor(_exceptionApiService: ExceptionApiService) { 
    super(new ArrayLogger(_exceptionApiService), true); 
    } 

    call(error, stackTrace = null, reason = null) { 
    super.call(error, stackTrace, reason); 
    } 
} 

然后我ArrayLogger类:

export class ArrayLogger { 

    private _exceptionApiService: ExceptionApiService; 

    constructor(_exceptionApiService: ExceptionApiService) { 
    this._exceptionApiService = _exceptionApiService; 
    } 

    res = []; 
    log(s: any): void { this.res.push(s); } 
    logError(s: any): void { this.res.push(s); } 
    logGroup(s: any): void { this.res.push(s); } 
    logGroupEnd() { 

    let error: Error; 

    let message = this.res[0].replace('EXCEPTION: ', ''); 
    let stack = []; 
    let index = this.findStackTrace(this.res); 

    if (index === -1) { 
     stack.push('Could not find stackTrace!'); 
    } else { 
     this.res[index].split('\n').map(line => stack.push(line.trim())); 
    } 

    error = new Error({ 
     url: window.location.href, 
     error: message, 
     stack: stack, 
     browser: this.getBrowser(navigator.userAgent), 
     userAgent: navigator.userAgent, 
     platform: navigator.platform, 
     datetime: '' 
    }); 

    this._exceptionApiService.post(error); 

    } 

    (...) 

} 

这给我的错误:

zone.min.js:1 Unhandled Promise rejection: (SystemJS) EXCEPTION: Error during instantiation of ApplicationRef_! (ApplicationRef -> ApplicationRef_). 
    ORIGINAL EXCEPTION: No provider for ExceptionApiService! (ExceptionHandler -> ExceptionApiService) 
    ORIGINAL STACKTRACE: 
    Error: DI Exception 
     at NoProviderError.BaseException [as constructor] (http://localhost:4200/vendor/@angular/core/src/facade/exceptions.js:27:23) 
     at NoProviderError.AbstractProviderError [as constructor] 

我怎样才能正确地注入我exceptionAPIService?

回答

1

既然你在CustomExceptionHandler注射ExceptionApiService,您需要提供它,太:

bootstrap(App, [ 
    APP_ROUTER_PROVIDERS, 
    HTTP_PROVIDERS, 
    ExceptionApiService, 
    provide(ExceptionHandler, { useClass: CustomExceptionHandler }),