मैं निम्नलिखित कोड है:कस्टम ErrorHandler में Angular2 इंजेक्शन सेवाओं
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)
}
}
हालांकि, जब मेरे ऐप बूटस्ट्रैप, यह अगर मैं निम्न त्रुटि के साथ MyErrorHandler
में एक इंजेक्शन है विफल रहता है:
Unhandled Promise rejection: Provider parse errors:
Cannot instantiate cyclic dependency!
अगर मैं constructor (private _appLog: AppLog) {}
निकालूँ और फिर handleError
में कुछ और यह सिर्फ ठीक काम करता है और ErrorHandler है बुलाया।
मुझे लगता है कि यह AppLog और MyErrorHandler के रूप में काम नहीं करता है एक ही समय में instantiated कर रहे हैं
setTimeout के अंदर कोड एक फ़ंक्शन होना चाहिए - उदा। setTimeout (() => {this._appLog = injector.get (AppLog)); }); –
@CraigShearer बहुत बहुत धन्यवाद - तय। –