cyclic dependency error when importing service into another service

人盡茶涼 提交于 2021-01-28 05:33:04

问题


I'm trying to set default headers for my http requests using the DefaultRequestOptions class provided by Angular 2. Documentation can be found here: https://angular.io/docs/ts/latest/guide/server-communication.html#!#override-default-request-options

I want to add a default bearer token, which gets set in one of my services, but doing so gives me the following error in my browser console:

Unhandled Promise rejection: Provider parse errors: Cannot instantiate cyclic dependency! Http: in NgModule AppModule in ./AppModule ; Zone: ; Task: Promise.then ; Value:

Here is my default-request-options.service.ts file:

import { Injectable }                         from '@angular/core';
import { BaseRequestOptions, RequestOptions } from '@angular/http';
import { UserService }                        from './user.service';

@Injectable()
export class DefaultRequestOptions extends BaseRequestOptions {

  constructor(private userService: UserService) {
    super();

    // Set the default 'Content-Type' header
    this.headers.set('Content-Type', 'application/json');
    this.headers.set('Accept', 'application/json');
    this.headers.set('Authorization', 'Bearer ' + this.userService.idToken);
  }
}

export const requestOptionsProvider = { provide: RequestOptions, useClass: DefaultRequestOptions };

Here is the relevant code in my app.module.ts file:

import { requestOptionsProvider }         from './default-request-options.service';
import { UserService }                    from './user.service';

@NgModule({ 
    imports: [
        ...
    ],  
    declarations: [
        ...
    ],    
    providers: [        
        ...        
        requestOptionsProvider,        
        UserService
    ],
    bootstrap: [ AppComponent ]
})

What am I doing wrong?


回答1:


Imagine 3 services ..

Service1, Service2, Service3

  • Service1 imports Service2
  • Service2 imports Service3
  • Service3 imports Service1

Service1 tries to import 2, 2 tries to import 3, 3 tries to import 1 and this continues forever. This is a cyclic dependency.

Break the loop to fix it.



来源:https://stackoverflow.com/questions/42307669/cyclic-dependency-error-when-importing-service-into-another-service

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!