Ich habe den folgenden Code:Angular2 Spritzen Dienstleistungen in benutzerdefinierten Fehlerbehandler
app.module.ts:
NgModule({
declarations: [
AppComponent
],
imports: [
RouterModule,
BrowserModule,
ReactiveFormsModule,
FormsModule,
HttpModule,
AppRoutingModule // Routes
],
providers: [ // services
AppLog,
{provide: ErrorHandler, useClass: MyErrorHandler}
],
bootstrap: [AppComponent]
})
export class AppModule {}
MyErrorHandler.ts:
@Injectable()
export class MyErrorHandler implements ErrorHandler {
constructor (private _appLog: AppLog) {}
handleError(error:any):void {
let errorMessage: string = "" + error
this._appLog.logMessageAsJson(errorMessage, "error")
.subscribe(
...
)
}
}
appLog.ts
@Injectable()
export class AppLog {
constructor (private _http: Http) {}
logMessageAsJson(message: string, type: string) {
let headers = new Headers({ "Content-Type": "application/json" })
let jsonMessage = {"type": type, "message": message}
return this._http.post(JSON.stringify(jsonMessage), headers)
}
}
Wenn jedoch mein app Bootstrap, versagt es, wenn ich eine Injektion in MyErrorHandler
mit dem folgenden Fehler habe:
Unhandled Promise rejection: Provider parse errors:
Cannot instantiate cyclic dependency!
Wenn ich constructor (private _appLog: AppLog) {}
entfernt und dann etwas anderes in handleError
tue es funktioniert ganz gut und die Fehlerbehandler sind namens.
Ich denke, es nicht als AppLog und MyErrorHandler funktioniert auf der gleichen Zeit instanziiert
Der Code innerhalb von setTimeout sollte eine Funktion sein - z. setTimeout (() => {this._appLog = injektor.get (AppLog)); }); –
@CraigShearer vielen Dank - behoben. –