接口如何解决循环依赖?

时间:2017-05-17 16:09:18

标签: circular-dependency

如果您搜索如何解决循环依赖关系,答案几乎总是“使用接口”。我知道如何使用这种技术来使循环依赖工作,但我不明白这是如何解决循环依赖。

假设我有两个类View和Presenter相互引用。现在我应用“解决方案”并创建接口IView和IPresenter。 View不再引用Presenter,而是IPresenter;演示者引用IView而不是View。

  1. 我设置了View,它需要一个IPresenter。
  2. 要获得IPresenter的实现,我需要设置Presenter。
  3. 要设置Presenter,我需要一个IView。
  4. 要获得IView的实现,我需要设置View。
  5. 圈子越来越大,但它仍然存在。 View和Presenter仍然相互依赖,而不是直接。但是,我所看到的每个答案都绝对肯定循环依赖现在是已解决。我在这里有什么误解?

2 个答案:

答案 0 :(得分:0)

循环依赖关系可以使用DI来解决,但只能使用"延迟"或"财产"注射,而不是"构造函数"注射。您需要首先构造对象,然后在它们上设置属性以注入依赖项。支持属性注入的DI容器可以抽象出这个细节。

答案 1 :(得分:0)

这些循环依赖关系尚未解决。

这些情况下的标准答案是在构造后分配依赖关系。这解决了这些循环依赖关系创建的问题,而不是循环依赖关系本身。

这可能主要是一个语言问题,人们只是说“我解决了X和Y之间的循环依赖”,而不是“我解决了我们因为X和Y之间的循环依赖而产生的问题”。