将服务导入另一个服务时出现循环依赖性错误

时间:2017-02-17 21:26:42

标签: angular angular2-services angular2-http

我尝试使用Angular 2提供的DefaultRequestOptions类为我的http请求设置默认标头。可以在此处找到文档:https://angular.io/docs/ts/latest/guide/server-communication.html#!#override-default-request-options

我想添加一个默认的承载令牌,它在我的一个服务中设置,但这样做会在浏览器控制台中出现以下错误:

  

未处理的Promise拒绝:提供程序解析错误:无法实例化   循环依赖! Http:在./AppModule中的NgModule AppModule中;区:    ;任务:Promise.then;值:

这是我的 default-request-options.service.ts 文件:

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 };

以下是 app.module.ts 文件中的相关代码:

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

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

我做错了什么?

1 个答案:

答案 0 :(得分:1)

想象一下3项服务..

Service1,Service2,Service3

  • Service1导入Service2
  • Service2导入Service3
  • Service3导入Service1

Service1尝试导入2,2尝试导入3,3尝试导入1并且这将永远继续。这是一种循环依赖。

打破循环以修复它。