Injektor-Fehler "Provider-parsing-Fehler: kann Nicht instanziiert werden zyklische Abhängigkeit!"
Ich habe versucht, zu erstellen eine HttpInterceptor fügen Sie einige überschriften, die für die Autorisierung jeder http das passiert. Ich brauche, um den Header von einem Dienst namens " AuthService. Hier ist der code, der unter:
Interceptor:
import { Injectable } from '@angular/core';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';
import { AuthService } from './auth.service';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private auth: AuthService) { }
}
AuthService:
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
@Injectable()
export class AuthService {
constructor(private http: HttpClient) { }
}
AppModule:
providers: [{
provide: HTTP_INTERCEPTORS,
useClass: AuthInterceptor,
multi: true,
}, AuthService]
Erhalte ich die folgende Fehlermeldung:
Fehler: Anbieter-parsing-Fehler:
Kann nicht instanziiert werden zyklische Abhängigkeit! InjectionToken_HTTP_INTERCEPTORS ("[FEHLER ->]"): in NgModule AppModule
in ./AppModule@-1:-1
Ich bereits überprüft die bisherigen Antworten, aber ich verstehe nicht, wo das zyklische Abhängigkeit erkannt wurde. Was ich versuche zu tun, ist hier beschrieben: https://angular.io/guide/http#setting-new-headers
InformationsquelleAutor itsundefined | 2017-08-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf diese GitHub-Diskussion (Heft #18224)
Als eine Problemumgehung, die Sie verwenden können
Injector
manuell und injizieren relevanten Dienst inintercept
Methode: https://github.com/angular/angular/issues/18224#issuecomment-316957213UPDATE:
Vor der Eckigen
4.3.0
leider ist es unmöglich, zu verwendenInjector
manuell von innenintercept
Methode:ERROR Error: Uncaught (in promise): RangeError: Maximum call stack size exceeded
Also es ist mehr ein workaround mit
rxjs
:perfekte Lösung, meinen Tag gerettet.
Wenn Sie dieses bekommen:
http.interceptor.ts:64 Uncaught TypeError: $.a.create(...).mergeMap is not a function
das heißt, Sie importieren die falsche mergeMapimport 'rxjs/add/operator/mergeMap';
habe das gleiche Problem mit Winkelgetriebe 6 und gelöst mit der Methode hier github.com/angular/angular/issues/18224#issuecomment-329939990
InformationsquelleAutor oleh.meleshko
Entfernen AuthService vom Anbieter-Liste als Import in die Interceptor schon so die zyklische Abhängigkeit.
Ich denke, dass ich das Problem behoben wurde, aber es sieht dumm aus... ich aufgeteilt authService in zwei. In einer Datei habe ich alle Variablen und auf der anderen alle http-Anfragen. Auf diese Weise habe ich verlangen nur, dass die Variablen auf meinem Interceptor die Beseitigung der zyklischen Abhängigkeit. Ist dies ein anti-pattern oder sollte ich es behalten? Anyways vielen Dank für Ihre Zeit.
Wie haben Sie teilen Sie Ihre Klasse in zwei ? ist es wie zwei getrennte Klassen, die sich aus der base-service-Klasse ?
Es ist nicht mehr die beste, aber ich teilte es so, dass es zwei service-Klassen, die unabhängig von einander. In den ersten service habe ich alle Variablen, die zur Authentifizierung wie tokens, Benutzername etc. Im zweiten service, den ich nur sich die observablen, um Zugriff auf das backend. Diese Art der http-import-und dependency injection-ist nur erforderlich für den zweiten Dienst, der nicht auf die Authentifizierung Variablen. Auf meiner login-Komponente, die ich importieren beide Dienste. Ich sende die Anfrage ab dem zweiten service. Ich erhalte die Antwort und setzen die Variable auf das erste service.
So ist meine interceptor, stellt der authentication header hat nur Zugriff auf den ersten Dienst, der nicht von den http-import. Problem gelöst
InformationsquelleAutor Vega
Entfernen Sie folgende aus AuthService -
Der Grund ist - HttpClient verwenden Abfangjäger intern und interceptor mit AuthService und AuthService ist mit HttpClient. somit gibt es "cyclic dependency" - Fehler.
Einverstanden, habe ich angesichts dieses Problem in version 5.2.0.
InformationsquelleAutor Kanchan