【问题标题】:How to solve the circular dependency in angular 11如何解决角度11中的循环依赖
【发布时间】:2021-04-20 08:12:11
【问题描述】:

我有一个 loggerService,它通过 BackendService 将所有消息记录到后端系统,包括从 IpService 获取的设备 IP:

LoggerService injects IpService and BackendService

问题是,服务 IpService 和 BackendService 也应该能够通过 LoggerService 记录错误:

IpService injects LoggerService
BackendService injects LoggerService

我该如何解决这个特殊问题?

如果没有办法解决这个问题,我正在寻找一种方法来忽略这个特定循环依赖的角度警告,但在发现其他循环依赖时警告我。

【问题讨论】:

    标签: angular dependency-injection circular-dependency


    【解决方案1】:

    作为一个选项,您可以使用Injector

      constructor(private injector: Injector) { }
    
       func() {
         const auth = this.injector.get(LoggerService);
         //... do something
       }
    

    但是,您遇到该错误的事实可能暗示您当前的架构有问题。我没有看到你的代码,但在我看来,LoggerService 应该只做日志记录,不要使用 IpServiceBackendService 作为依赖项。

    【讨论】:

    • 谢谢,我已经尝试过注入器,但 angular 仍然找到循环依赖项,这可能在以前版本的 angular 中有效
    【解决方案2】:

    我所做的是解决循环依赖问题,这是非常必要的。 不要忽视这些警告!

    我从 IpService 和 BackendService 中删除了 LoggerService,因为当这些服务抛出一个应该被记录的错误时,你会以一个无休止的调用堆栈结束,让浏览器冻结并破坏你的应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-15
      • 2016-09-21
      • 2020-11-12
      相关资源
      最近更新 更多