Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度2-服务中的服务_Angular_Typescript - Fatal编程技术网

Angular 角度2-服务中的服务

Angular 角度2-服务中的服务,angular,typescript,Angular,Typescript,我想在Angular2应用程序中使用两个服务。当我尝试在GlobalsService中使用GuideService和GuideService中使用globalservice时,我收到以下错误: zone.js:392 未处理的承诺拒绝:(SystemJS)无法解析GuideService:(?,?)的所有参数。 错误:无法解析GuideService:(?,?)的所有参数。 在CompileMetadataResolver.\u getDependenciesMetadata 我的服务: exp

我想在Angular2应用程序中使用两个
服务。当我尝试在
GlobalsService
中使用
GuideService
GuideService
中使用
globalservice
时,我收到以下错误:

zone.js:392
未处理的承诺拒绝:(SystemJS)无法解析GuideService:(?,?)的所有参数。
错误:无法解析GuideService:(?,?)的所有参数。
在CompileMetadataResolver.\u getDependenciesMetadata

我的服务:

export class GlobalsService {

     [...]

     constructor(private guideService: GuideService) { }

     [...]

}

export class GuideService {

     [...]

     constructor(private globals: GlobalsService) { }

     [...]

 }
是否有其他方式以这种方式使用服务

编辑 我有这个
GlobalsModule
,它被导入我的
AppModule

import {NgModule} from "@angular/core";
import {CommonModule} from "@angular/common";
import {GlobalsService} from './globals.service'

@NgModule({
    providers: [GlobalsService],
    imports: [CommonModule]
})

export class GlobalsModule {
}

Angular将无法构造您的任何服务。在构造函数依赖项注入中,服务不能相互依赖

在幕后,Angular创建服务列表,并根据构建其他服务所需的服务对列表进行排序(首先是没有依赖关系的服务)。在这种情况下,
service1
依赖于
service2
service2
依赖于
service1

解决方法:

@Injectable()
export class GlobalsService {

     [...]

     constructor(private injector: Injector) { }

     [...]


    get guideService() {
        return this.injector.get(GuideService);
    }
}

@Injectable()
export class GuideService {

     [...]

     constructor(private globals: GlobalsService) { }

     [...]

}

注意:在大多数情况下,电路依赖性意味着您的设计是错误的。每个服务都应该有明确的责任,这样的设计很难让人看到。在这种情况下,你应该考虑把代码放在一个服务中。

< P>个人,我不赞成这样的循环依赖,也许这应该由第三个服务来处理,这两个服务都注入了这两个服务。无论如何,我确实认为您可以使用
@Inject
forwardRef
,两者都存在于
“@angular/core”
包中:

export class GlobalsService {

     [...]

     constructor(
        @Inject(forwardRef(() => GuideService))
        private guideService: GuideService
     ) {}

     [...]

}

export class GuideService {

     [...]

     constructor(
        @Inject(forwardRef(() => GlobalsService))
        private globals: GlobalsService
     ) {}

     [...]

 }

是否在您的模块中声明了
GlobalsService
?是否必须在我的
GuideModule
或我的
AppModule
中声明?如果我必须声明它,我可以用现在的方式访问它吗?或者我必须以不同的方式使用它吗?事实上,在声明之前,是否提供了它(即包含在您的
提供者
元数据中)?感谢您的帮助。我仍然收到一个错误,但我将使用第三个服务来处理此问题。我忘记了
forwardRef
。这个答案比我的好。谢谢你的帮助。我仍然得到一个错误,但我将使用第三个服务来处理这个问题。