我已经阅读了几篇有关解决角度循环依赖的文章,所有文章都提到使用forwardRef解决循环依赖。我在网上找到的所有参考文献仅涉及组件服务交互。
我的情况是这样的:
如果两个服务相互依赖,并且这导致类循环依赖问题。我找不到与使用forwardRef或解决两种服务之间循环依赖关系的最佳方法有关的合适线程。
如果有人遇到过类似的问题,并且对如何解决该问题提出了建议,则是很有意义的。
我知道循环依赖是可以避免的,但是如果我们需要以正确的方式进行操作,那我应该采用哪种方法呢?
谢谢
答案 0 :(得分:1)
我已经阅读了几篇有关解决角度循环依赖的文章,所有文章都提到使用forwardRef解决循环依赖。
他们不应该告诉你,因为那不是目的。
forwordRef 使您可以在提供之前引用可注射令牌。
循环依赖关系不是Angular问题。这是TypeScript编译问题。
如果两个服务相互依赖并且导致类循环依赖问题
进口是圆形的。它与 classes 没有关系,但是当您尝试将文件A导入文件B,并且B也导入文件A时,便遇到了循环问题。
我知道循环依赖是可以避免的,但是如果我们需要采取适当的方式,那么我应该采用哪种方法?
这听起来像服务A取决于服务B,服务B取决于服务A。
如果圆形导入是尝试使用Angular注射器的结果,则可以通过使用接口来解决此问题。您的至少一项服务应具有一个接口,然后为该服务定义一个注入令牌。
export interface IServiceB { }
export const SERVER_B: InjectionToken<IServiceB> = new InjectionToken<IServiceB>('SERVICE_B');
然后可以在IServiceB
类中实现ServiceB
,但是不要在同一文件中将IServiceB
接口定义为{{1 }}否则一切都不是。
然后您可以在模块中提供此令牌。
ServiceB
现在您可以安全地将此服务注入@NgModule({
...
provides: [
{ provide: SERVICE_B: useClass: ServiceB }
]
)
ServiceA
现在没有圆形进口。
要朝另一个方向发展,您可能必须为@Injectable()
export class ServiceA {
constructor(@Inject(SERVICE_B) serviceB: IServiceB) {...}
}
定义另一个接口。