39

我有2个项目。

Project#2 引用了 Project#1

现在我需要在 Project#1 中引用 Project#2,但是 vs.net 抱怨循环依赖。

有没有办法解决这个问题?

4

11 回答 11

76

绝对不。循环依赖是糟糕设计的标志。我并不是要严厉。有一些方法可以解决这个问题。

1)您可以将通用代码重构到另一个项目,例如 Project#0

2)您可以修复您的设计,这可能是要走的路。

鲍勃叔叔有一篇关于包装原则的好文章,其中包括非循环依赖原则。 http://www.objectmentor.com/resources/articles/granularity.pdf。阅读本文以了解为什么循环依赖是一件坏事。

于 2010-01-12T21:41:42.790 回答
16

重构您的项目以将公共元素取出到项目#1 和项目#2 都引用的“项目#0”中。

于 2010-01-12T21:37:57.210 回答
7

将两者合二为一或重新设计。

于 2010-01-12T21:37:11.813 回答
5

这表明您的设计存在问题。如果确实需要两个或多个类型相互了解,那么它们应该存在于同一个程序集中。

于 2010-01-12T21:37:48.040 回答
3

不。正确地构建您的项目。尝试使用某种基于抽象的排序——从低级到高级。

于 2010-01-12T21:37:41.223 回答
3

循环依赖意味着这些不再是两个独立的项目(因为不可能只构建其中一个)。

您需要重构以使您只有单向依赖项,或者您应该将它们合并到一个项目中。

于 2010-01-12T21:39:21.660 回答
3

循环引用可以如上一个问题中所见,但您不应该这样做,因为每个人都已经在此处说明了原因。

于 2010-01-12T22:30:07.307 回答
2

真的不是要成为一个聪明人,但更好的程序设计就是答案。

于 2010-01-12T21:37:58.633 回答
2

每个人都会告诉你这是一个糟糕的设计,不要这样做等等。然而,有时说起来容易做起来难,将实现转移到单独的公共代码中是不可取的。对于这种情况,不要直接调用另一个包,而是从一个包发出一个事件并在另一个包中处理它。这样,您就不需要使另一个组件成为第一个组件中的依赖项。

如果您仍希望将实现保留在单独的包中,另一种方法是从接口派生逻辑类并将它们定义在单独的包中。如果您有办法实例化实现,例如通过依赖注入或其他方式,则此方法有效。

于 2019-09-21T06:07:35.540 回答
1

这似乎是一个设计缺陷,没有别的。重新设计是解决方案。

于 2010-01-13T05:11:42.460 回答
-4

我认为这不是一个好的解决方案,但我们仍然可以按照以下步骤操作

  • 添加参考
  • 浏览和
  • 转到dll项目的Debug文件夹,
  • 找到 .dll 并添加 .
于 2013-03-29T13:42:13.267 回答