解决循环依赖

时间:2010-12-28 18:26:27

标签: .net circular-dependency

我在Visual Studio解决方案中有两个类项目。由于项目的性质,两个项目都互相引用,因为他们需要彼此的服务(想想“我刮你的背,你划伤我的”这个词)。

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

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

由于

6 个答案:

答案 0 :(得分:8)

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

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

alt text

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

alt text

答案 1 :(得分:4)

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

另一方面,如果两个项目紧密耦合,那么你也应该考虑将它们组合成一个项目。

答案 2 :(得分:2)

除了“必须打破它”之外。将两者分开或将它们组合成一个模块。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

也可以构建netmodule,然后使用Assembly Linker将它们组合成一个程序集,但同样,结果不能证明所涉及的工作是合理的。

相关问题