How to solve the circular dependency

Discussão em 'Angular' iniciado por Dmitry Grinko, Setembro 13, 2024.

  1. I have 3 services:


    auth.service.ts, account.service.ts, http.service.ts
    ​

    While user signup I should create new account therefore I imported account.service.ts to auth.service.ts. I should do it because I use signup form data for creating a new account.

    @Injectable()
    export class AuthService {
    constructor(public accountService: AccountService) {}

    signUp(name: string, phone: string, email: string, password: string): void {

    ...

    userPool.signUp(phone, password, attributeList, null, (err: any, result: any) => {
    if (err) {

    ...

    return;
    }

    this.accountService.createAccount(name, phone, email).subscribe(res => {

    ...

    this.router.navigate(['/auth/confirmation-code']);
    });
    });


    }

    So as I use AWS Cognito I should add an authorization token from auth.service.ts to http.service.ts therefore I imported auth.service.ts to http.service.ts.

    @Injectable()
    export class HttpService {
    private actionUrl: string;
    private headers: Headers;
    private options: RequestOptions;

    constructor(
    public _http: Http,
    public authService: AuthService
    ) {
    this.actionUrl = 'https://example.com/dev';
    this.headers = new Headers();

    this.authService.getAuthenticatedUser().getSession((err: any, session: any) => {
    if(err) return;
    this.headers.append('Authorization', session.getIdToken().getJwtToken());
    });

    this.headers.append('Content-Type', 'application/json');
    this.headers.append('Accept', 'application/json');
    this.headers.append('Access-Control-Allow-Headers', 'Content-Type, X-XSRF-TOKEN');
    this.headers.append('Access-Control-Allow-Origin', '*');

    this.options = new RequestOptions({ headers: this.headers });
    }

    get(request: string): Observable<any> {
    return this._http.get(`${this.actionUrl}${request}`)
    .map(res => this.extractData(res))
    .catch(this.handleError);
    }


    In my account.service.ts I should use http.service.ts for creating new account.

    @Injectable()
    export class AccountService {
    constructor(public httpService: HttpService) {}


    WARNING in Circular dependency detected: src/app/core/services/account.service.ts -> src/app/core/services/http.service.ts -> src/app/core/services/auth.service.ts -> src/app/core/services/account.service.ts

    WARNING in Circular dependency detected: src/app/core/services/auth.service.ts -> src/app/core/services/account.service.ts -> src/app/core/services/http.service.ts -> src/app/core/services/auth.service.ts

    WARNING in Circular dependency detected: src/app/core/services/http.service.ts -> src/app/core/services/auth.service.ts -> src/app/core/services/account.service.ts -> src/app/core/services/http.service.ts
    ​

    I understand that this is circular dependency Error. How to solve it? Best practice? All services fulfill their role and are important.

    Continue reading...

Compartilhe esta Página