У меня есть обработчик исключений, как это, в котором я пытаюсь внедрить услугу (ErrorReportingService)Angular2 - Как внедрить услугу в обработчик исключений
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);
}
}
Служба Пытаюсь для ввода выглядит так:
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 зарегистрирована у поставщиков компонента приложения.
Я также пробовал инъекционные услугу по-разному, как это:
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, поскольку они уже находятся в поставщиках компонента App? –
Мы переопределяем Angular ExceptionHandler по умолчанию, зарегистрировав поставщика для этого в бутстрапе, и Angular принимает решение, когда создавать службу на основе того, где она зарегистрирована, поэтому в этом случае при загрузке, поэтому он будет искать всю зависимость от на том же уровне, хотя вы, возможно, добавили провайдера ErrorReportingService в компонент приложения, который создаст новый экземпляр компонента ErrorReportingService for App или детей. Надеюсь это поможет!! –