Angular 如何在角度服务中使用forwardRef来避免循环依赖?

Angular 如何在角度服务中使用forwardRef来避免循环依赖?,angular,angular-services,forward-reference,Angular,Angular Services,Forward Reference,我已经阅读了两篇关于在angular中解析循环依赖的文章,所有这些都提到了使用forwardRef解析循环依赖。我在网上找到的所有参考资料都只涉及组件服务交互 我的设想是: 如果两个服务相互依赖,这会导致类循环依赖问题。我找不到与使用forwardRef相关的合适线程,也找不到解决两个服务之间循环依赖关系的最佳方法 如果有人遇到过类似的问题,并就如何处理这一问题提出了建议,这是值得赞赏的 我知道循环依赖是可以避免的,但如果我们需要以适当的方式来实现,那么我应该采用什么方法呢 谢谢 我已经阅读了两

我已经阅读了两篇关于在angular中解析循环依赖的文章,所有这些都提到了使用forwardRef解析循环依赖。我在网上找到的所有参考资料都只涉及组件服务交互

我的设想是:

如果两个服务相互依赖,这会导致类循环依赖问题。我找不到与使用forwardRef相关的合适线程,也找不到解决两个服务之间循环依赖关系的最佳方法

如果有人遇到过类似的问题,并就如何处理这一问题提出了建议,这是值得赞赏的

我知道循环依赖是可以避免的,但如果我们需要以适当的方式来实现,那么我应该采用什么方法呢

谢谢

我已经阅读了两篇关于在angular中解析循环依赖的文章,所有这些都提到了使用forwardRef解析循环依赖

他们不应该告诉你这些,因为那不是目的

forwordRef允许您在提供可注入令牌之前引用它

循环依赖不是角度问题。这是一个类型脚本编译问题

如果两个服务相互依赖,导致类循环依赖性问题

导入的是循环的。这与类无关,但当您尝试使用文件A导入文件B,并且B也导入文件A时,您会遇到一个循环问题

我知道循环依赖是可以避免的,但如果我们需要以适当的方式来实现,那么我应该采用什么方法呢

这听起来像是服务A依赖于服务B,服务B依赖于服务A

如果循环导入是尝试使用角度喷射器的结果,则可以使用接口来解决此问题。至少一个服务应该有一个接口,然后为该服务定义注入令牌

导出接口IServiceB{}
export const SERVER_B:InjectionToken=new InjectionToken('SERVICE_B');
然后可以在
ServiceB
类中实现
IServiceB
,但重要的是不要在同一文件中定义
IServiceB
接口作为
ServiceB
,否则一切都不适用

然后,您可以在模块中提供此令牌

@NgModule({
...
规定:[
{provide:SERVICE_B:useClass:ServiceB}
]
)
现在,您可以安全地将此服务注入
ServiceA

@Injectable()
出口类服务A{
构造函数(@Inject(SERVICE_B)serviceB:IServiceB){…}
}
现在没有循环进口


若要转到另一个方向,您可能必须为
ServiceA

定义另一个接口,如果两个服务相互依赖,您会有一种代码味道。引入第三个用作层的服务。是的,假设是在一种情况下,我无法避免循环依赖,在这种情况下,我们如何解决这个问题,我知道使用componet服务我们可以使用forwardRef或我的手动提供依赖项来处理它。很好的解释-作为一个简短的提示,在这种情况下,上面的行应该是“一切都是空的”,这意味着什么都不是,而不是“不是”。