我有2个项目。
项目#2引用了项目#1
现在我需要在Project#1中引用Project#2,但vs.net抱怨循环依赖。
有没有办法解决这个问题?
答案 0 :(得分:60)
绝对不是。循环依赖性表明设计不良。我并不是说要严厉。有一些方法可以解决这个问题。
1)您可以将公共代码重构为另一个项目,比如Project#0
2)你可以修复你的设计,这可能就是你的选择。
鲍勃叔叔有一篇关于包装原则的文章很好,其中包括非循环依赖原则。 http://www.objectmentor.com/resources/articles/granularity.pdf。阅读本文以了解为什么循环依赖是一件坏事。答案 1 :(得分:11)
重构项目,将公共元素带入项目#1和项目#2引用的“项目#0”。
答案 2 :(得分:5)
将两者合并为一个或重新设计。
答案 3 :(得分:5)
这表明您的设计存在问题。如果真正需要两种或多种类型相互识别,那么它们应该存在于同一个程序集中。
答案 4 :(得分:4)
没有。正确构建项目。尝试使用基于抽象的某种排序 - 从低级到高级。
答案 5 :(得分:3)
循环依赖意味着它们不再是两个独立的项目(因为它们不可能只构建其中一个)。
您需要重构,以便只有单向依赖,或者将它们合并到一个项目中。
答案 6 :(得分:3)
循环参考可以完成,如previous question所示,但不应该,原因是每个人都已在此处说明。
答案 7 :(得分:2)
我 真的 并不意味着成为一个聪明的人,但更好的程序设计就是答案。
答案 8 :(得分:1)
这似乎是一个设计缺陷,没有别的。重新设计是解决方案。
答案 9 :(得分:0)
每个人都会告诉您,这是一个糟糕的设计,不要这样做,等等。但是有时候说起来容易做起来难,因此不希望将实现移到单独的通用代码中。 在这种情况下,与其直接调用另一个包,不如从一个包中发出一个事件并在另一个包中进行处理。这样,您就无需在第一个组件中使另一个组件成为依赖项。
如果您仍然希望将实现保留在单独的程序包中,则另一种方法是从接口派生逻辑类并在单独的程序包中定义这些逻辑类。如果您有实例化实现的方式(例如通过依赖项注入或其他方式),则此方法有效。
答案 10 :(得分:-4)
我不认为这是一个很好的解决方案,但我们仍然可以通过以下步骤来实现