Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.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 树型可抖动服务如何避免循环依赖,而前角型6 DI则没有?_Angular_Dependency Injection - Fatal编程技术网

Angular 树型可抖动服务如何避免循环依赖,而前角型6 DI则没有?

Angular 树型可抖动服务如何避免循环依赖,而前角型6 DI则没有?,angular,dependency-injection,Angular,Dependency Injection,首先,我创建了一个传递到useFactory中的函数: //circular.factory.ts 导出let circularFactory=(实例:MyService)=>{ log('使用:'调用useFactory,实例); 返回实例| | new MyService() } 现在我要配置DI,以便服务引用工厂,工厂引用服务。 第一种情况: 在这里,我使用了pre angular 6 DI way,在我的AppModule的NgModule上用providers数组配置它 //app.

首先,我创建了一个传递到
useFactory
中的函数:

//circular.factory.ts
导出let circularFactory=(实例:MyService)=>{
log('使用:'调用useFactory,实例);
返回实例| | new MyService()
}
现在我要配置DI,以便服务引用工厂,工厂引用服务。

第一种情况: 在这里,我使用了pre angular 6 DI way,在我的
AppModule
NgModule
上用
providers
数组配置它

//app.module.ts
@NGD模块({
导入:[BrowserModule],
声明:[AppComponent],
引导:[AppComponent],
供应商:[{
副署长:[
[我的服务]
],
提供:MyService,
使用工厂:循环工厂
}]
})
导出类AppModule{}
正在运行,这将导致以下错误:

错误:提供程序分析错误: 无法实例化循环依赖项!MyService(“[ERROR->]”:在NgModule-AppModule中。/AppModule@-1:-1

那是意料之中的事。实际上,我创建了一个循环依赖项

第二种情况: 这次我将使用属性中提供的
@Injectable()
来配置DI,以引用根目录

//my.service.ts
@注射的({
副署长:[
[我的服务]
],
providedIn:'根',
使用工厂:循环工厂
})
导出类MyService{
构造函数(){
console.log('实例化MyService')
}
}
...
//app.component.ts
@组成部分({
选择器:“应用程序组件”,
模板:`
哦,嗨,你好。
`
})
导出类AppComponent{
构造函数(公共myService:myService){
log('将依赖项注入AppComponent:',this.myService);
}
}
如您所见,我添加了一些控制台日志,用于调试目的。结果如下:

calling useFactory with: undefined
instantiating MyService
injecting dependency into AppComponent:
与第一种情况相反,它设法将
useFactory
的令牌解析为
undefined
。但是为什么呢?它不应该像第一个例子中那样循环依赖项而失败吗?它不是应该以同样的方式工作吗?我搞不懂

这是你能跑的地方