8

我在 Visual Studio 解决方案中有两个类项目。由于项目的性质,两个项目相互引用,因为它们需要彼此的服务(想想“我挠你的背,你挠我的”短语)。

Visual Studio (2010) 不允许我从项目 a 添加对项目 b 的引用,因为项目 a 已经引用了项目 b。

有什么策略可以解决这种循环依赖?

谢谢

4

6 回答 6

8

您可以使用两种典型的方法:

1)将两个项目合并为一个项目。

替代文字

2)找到两个项目的共同部分,并将它们分解为单独的第三个项目。

替代文字

于 2010-12-28T18:28:57.510 回答
4

将独立服务(不依赖于其他项目的服务)重构为第三个类库,并让两个项目都引用第三个。

另一方面,如果这两个项目耦合得如此紧密,那么您也应该考虑将它们合并到一个项目中。

于 2010-12-28T18:29:02.653 回答
2

除了“必须打破它”之外别无他法。要么将两者分开,要么将它们组合成一个模块。

于 2010-12-28T18:28:05.290 回答
1

一个项目可以公开另一个项目实现的接口,然后它不再需要对另一个项目的引用。

于 2010-12-28T18:30:08.447 回答
0

我们有类似的情况,我们需要调用 dbCon 类来获取从项目 a 到项目 b 的 dbConnection 字符串。我们通过将其存储在数据库的 dbconfig 表中并将其作为参数传递给项目 b 来解决它。

于 2010-12-28T18:30:31.813 回答
0

可能正确的解决方案是将“项目a”和“项目b”的一部分分解为“项目c”。那么 A 和 B 都依赖于 C,并且都不依赖于另一个。

除了一些增量构建过程之外,不可能有真正的循环依赖,在这个过程中,您构建包含 B.dll 所需的所有内容但 B.dll 不需要的 A.dll,然后将其替换为已使用构建的新依赖新建的 B.dll 并包含依赖它的东西。最后,如此复杂的策略肯定不值得。

也可以构建网络模块,然后使用程序集链接器将它们组合成一个程序集,但同样,结果并不能证明所涉及的努力是合理的。

于 2010-12-28T18:33:45.850 回答