我有一个像这样的自定义异常处理程序,我试图在其中注入(inject)服务(ErrorReportingService)
import { ExceptionHandler, Injectable } from '@angular/core';
import {ErrorReportingService } from '../services/ErrorReportingService';
@Injectable()
export class InsightsExceptionHandler extends ExceptionHandler {
constructor(private _errorReporter: ErrorReportingService) {
super(null, null);
}
call(error, stackTrace = null, reason = null) {
this._errorReporter.logError(error);
}
}
我尝试注入(inject)的服务如下所示
import { Http, Response } from '@angular/http';
import { Injectable, Inject } from '@angular/core';
@Injectable()
export class ErrorReportingService {
private ErrorReportingUrl = `/property/insights/api/errorreporting`;
constructor(private _http: Http) { }
logError(error: any) {
var body = JSON.stringify(error);
this._http.post(this.ErrorReportingUrl, body, null);
}
}
ErrorReportingService 已在应用程序组件的提供程序下注册。
我也尝试过以不同的方式注入(inject)服务,如下所示:
export class InsightsExceptionHandler extends ExceptionHandler {
private _errorReporter: ErrorReportingService;
constructor( @Inject(ErrorReportingService) errorReporter: ErrorReportingService) {
super(null, null);
this._errorReporter = errorReporter;
}
......
尝试运行应用程序时出现此错误:
Error: (SystemJS) EXCEPTION: Error during instantiation of ApplicationRef_! (ApplicationRef -> ApplicationRef_).
ORIGINAL EXCEPTION: No provider for ErrorReportingService! (ExceptionHandler -> ErrorReportingService)
ORIGINAL STACKTRACE:
Error: DI Exception
最佳答案
我猜想在您引导应用程序的应用程序主文件中,您必须使用类似于下面的内容来进行异常处理,
在 Bootstrap 提供程序本身中添加您需要的所有服务,
bootstrap(
<YourAppComponent>,
[
// inject all the services which you need here
// so that they can be injected wherever required
ErrorReportingService,
provide(ExceptionHandler, {
useClass: InsightsExceptionHandler
})
]).catch(err => console.error(err));
关于Angular2 - 如何将服务注入(inject)自定义异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38734416/