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



我已经浏览了几篇关于在角度中解决循环依赖的文章,都提到了使用 forwardRef 来解决循环依赖。我在网上找到的所有参考资料都只涉及组件服务交互。

我的场景是这样的:

如果两个服务相互依赖,并且导致类循环依赖问题。我找不到与使用 forwardRef 或任何解决两个服务之间循环依赖关系的最佳方法相关的正确线程。

如果有人遇到过任何此类类似问题,并就如何处理此问题提出建议是可观的。

我知道循环依赖是可以避免的,但如果我们需要以正确的方式做到这一点,那么我应该采用什么方法?

谢谢

我已经浏览了几篇关于在角度中解决循环依赖的文章,所有文章都提到了使用 forwardRef 来解决循环依赖关系。

他们不应该告诉你,因为这不是它的用途。

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

循环依赖不是 Angular 问题。这是一个 TypeScript 编译问题。

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

进口是循环的。它与无关,但是当您尝试将文件 A 导入文件 B,并且 B 也导入 A 时,您会遇到循环问题。

我知道循环依赖是可以避免的,但如果我们需要以适当的方式做到这一点,那么我应该采用什么方法?

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

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

import { InjectionToken } from '@angular/core';
export interface IServiceB {}
export const SERVER_B: InjectionToken<IServiceB> = new InjectionToken<IServiceB>('SERVICE_B');

然后,您可以在ServiceB类中实现IServiceB,但不要在ServiceB相同的文件中定义IServiceB接口非常重要,否则一切都不是。

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

@NgModule({
...
providers: [
{ provide: SERVICE_B: useClass: ServiceB }
]
)

现在,您可以安全地将此服务注入ServiceA

@Injectable()
export class ServiceA {
constructor(@Inject(SERVICE_B) serviceB: IServiceB) {...}
}

现在没有循环进口。

要朝另一个方向走,您可能需要为ServiceA定义另一个接口。

相关内容

  • 没有找到相关文章

最新更新