Angulaire 4: Impossible d'instancier une dépendance cyclique! InjectionToken_HTTP_INTERCEPTORS
Je sais, cette question peut sembler en double et j'ai tout essayé trouvé sur stackover flux incapable de résoudre ce problème, de sorte s'il vous plaît garder avec moi
Pour vous permettre de reproduire l'erreur que je suis de vous fournir le code entier de la pensée de cette
Problème
J'obtiens l'erreur suivante:
Fournisseur d'erreurs d'analyse:↵Impossible d'instancier une dépendance cyclique!
InjectionToken_HTTP_INTERCEPTORS ("[ERREUR ->]"): dans NgModule AppModule
./AppModule@-1:-1
D'informations sur le scénario (Notes)
Note 1
Fichier: réponse-intercepteur.service.ts
Chemin: ./src/app/shared/interceptors/response-interceptor/
Je suis l'interception de la HTTPClient
réponses pour vérifier la 401
erreur et quand vient l'erreur, je dois demander à l'utilisateur de re-connexion.
Pour montrer la re-invite de connexion de l'utilisateur, j'ai fait un global-functions-services
qui a une fonction de "reconnecter'
Note 2
Fichier: mondial-fonction.service.ts
Chemin: ./src/app/shared/services/helper-services/global-function/
Ici est l'endroit où tout a commencé à arriver...
Dès que je suis en injectant le PersonService
constructor(
public dialog: MatDialog,
private _personService: PersonService
) { }
J'obtiens cette erreur et en PersonService je ne trouve aucune import
qui peuvent causer le problème.
PersonService:
./src/app/shared/services/api-services/person/person.service.ts
import { IRequest } from './../../../interfaces/I-request';
import { environment } from 'environments/environment';
import { Injectable } from '@angular/core';
//for service
import 'rxjs/add/operator/map'
import 'rxjs/add/operator/toPromise';
//models
import { Person } from 'app/shared/models/person';
import { RequestFactoryService, REQUEST_TYPES } from 'app/shared/factories/request-factory/request-factory.service';
@Injectable()
export class PersonService {
private _requestService: IRequest;
constructor(
_requestFactoryService: RequestFactoryService
) {
this._requestService = _requestFactoryService.getStorage(REQUEST_TYPES.HTTP);
}
public signup(record): Promise<Person> {
let url = environment.api + 'person/public/signup';
return this._requestService.post(url, record) as Promise<Person>;;
}
public authenticate(code: string, password: string): Promise<Person> {
let url = environment.api + 'auth/signin';
let postData = {
code: code,
password: password
}
return this._requestService.post(url, postData) as Promise<Person>;
}
}
Demande
S'il vous plaît suggérer une solution pour ce faire, j'ai déjà perdu 2 jours pour comprendre la question, mais pas de chance.
Merci beaucoup!! à l'avance
Bon de vous voir de nouveau.. @RahulSingh j'ai ajouté le
PersonService
dans la question.Vous avez probablement injecté un service à vous-même. Je suis passé par un problème similaire, j'avais injecté un LoginServe dans le LoginService lui-même.
OriginalL'auteur Vikas Bansal | 2017-11-03
Vous devez vous connecter pour publier un commentaire.
Dépendance cyclique, moyen tournant autour de l'infini, comme les planètes en orbite autour du soleil..
Solution: Briser la chaîne de dépendances, Re-facteur de code.
Vous avez GlobalFunctionService -> PersonService -> etc... -> ResponseInterceptorService ->, et en arrière -> GlobalFunctionService.
Cycle complet.
SUPPRIMER la PersonService la dépendance de l'GlobalFunctionService. (ce n'est pas utilisée de toute façon, si vous en avez besoin, puis de trouver différents moyens de se déplacer.)
reconnectez-vous(personService: PersonService) {..... }, Il suffit d'éviter constructeur.
afin de passer de la personne objet de service dans reconnecter fonction... je vais devoir injecter de la personne de service en réponse intercepteur de service qui, là encore, faire de la dépendance circulaire. S'il vous plaît suggérer quelque chose
ah... Laissez-moi voir
voir la diff, C'est juste un pointeur pour vous faire bouger.... github.com/bansalvks/simpleAngular4App/compare/...
OriginalL'auteur codeSetter
Vous devez modifier votre réponse-intercepteur.service.ts
Vous pouvez obtenir plus d'informations À partir de ce lien
Maximum call stack size exceeded↵RangeError: Maximum call stack size exceeded
Il fonctionne pour votre problème actuel, maintenant à vous de trouver la solution de
Maximum call stack
erreur à la placeest pas la
Maximum call stack
en raison de lacyclic dependency
...Je ne le pense pas, car comme vous pouvez le voir dans ce plunker la solution fonctionne bien
pour garantir cela, vous pouvez simplement sauter
GlobalFunctionService
d'injection et de la ligne de commentairethis._globalFunctionService.relogin();
et de vérifier ensuite si vous obtenezmaximum..
erreurOriginalL'auteur jitender
Utiliser setTimeout() dans le constructeur d'affecter le service.
Essayer cela et revenir en arrière si vous faire face à toute question.
OriginalL'auteur Jayendra Bariya