我在各种网站上看过几篇文章,提出通过使用依赖注入解决.NET程序集之间的循环依赖关系。这可能会解决构建错误,但它并没有真正解决循环依赖,是吗?对我来说,架构中似乎仍然存在逻辑错误。我是疯了还是其他人都同意1)这是对DI的不太好用,2)不是解决循环依赖问题的合适方法吗?
答案 0 :(得分:31)
如果两个对象之间存在循环依赖关系,则意味着您需要第三个对象,这两个对象将依赖于该对象,因此它们不会相互依赖。这篇文章是您问题的确切解决方案:
http://misko.hevery.com/2008/08/01/circular-dependency-in-constructors-and-dependency-injection/
答案 1 :(得分:7)
相同的答案在以下帖子中返回(我将为参考添加),创建一个依赖于的第三个类。这意味着:您违反单一责任原则。通过移动(提取)责任,这两个类依赖于一个单独的类,你将删除循环依赖。
仅供参考Single Responsibility Pattern on Wikipedia
其他人的StackOverflow讨论:
My answer以及在单独的类中提取责任的示例。
答案 2 :(得分:3)
DI不是用于循环依赖性解析,而是用于促进创建良好分离的组件,从而更加可测试的组件。
答案 3 :(得分:1)
因为我通过搜索“删除周期性依赖”找到了这篇有用的帖子,所以我会在这里投入0.02美元
是。您可以使用DI来解决循环依赖关系。解决任何问题的第一步是找到它。 Ninject抱怨我的循环依赖,并在引导时抛出一个有用的异常。 Ninject找到了它,并迫使我解决它。我可以欺骗并使用属性注入或方法注入,但这会破坏我对类不变量的保护(我认为你在抱怨)。
所以通过IoC对ctor注入投票,因为它会为你发现循环依赖。然后由您来重构并删除架构错误。