我在 Visual Studio 解决方案中有两个类项目。由于项目的性质,两个项目相互引用,因为它们需要彼此的服务(想想“我挠你的背,你挠我的”短语)。
Visual Studio (2010) 不允许我从项目 a 添加对项目 b 的引用,因为项目 a 已经引用了项目 b。
有什么策略可以解决这种循环依赖?
谢谢
我在 Visual Studio 解决方案中有两个类项目。由于项目的性质,两个项目相互引用,因为它们需要彼此的服务(想想“我挠你的背,你挠我的”短语)。
Visual Studio (2010) 不允许我从项目 a 添加对项目 b 的引用,因为项目 a 已经引用了项目 b。
有什么策略可以解决这种循环依赖?
谢谢
您可以使用两种典型的方法:
1)将两个项目合并为一个项目。
2)找到两个项目的共同部分,并将它们分解为单独的第三个项目。
将独立服务(不依赖于其他项目的服务)重构为第三个类库,并让两个项目都引用第三个。
另一方面,如果这两个项目耦合得如此紧密,那么您也应该考虑将它们合并到一个项目中。
除了“必须打破它”之外别无他法。要么将两者分开,要么将它们组合成一个模块。
一个项目可以公开另一个项目实现的接口,然后它不再需要对另一个项目的引用。
我们有类似的情况,我们需要调用 dbCon 类来获取从项目 a 到项目 b 的 dbConnection 字符串。我们通过将其存储在数据库的 dbconfig 表中并将其作为参数传递给项目 b 来解决它。
可能正确的解决方案是将“项目a”和“项目b”的一部分分解为“项目c”。那么 A 和 B 都依赖于 C,并且都不依赖于另一个。
除了一些增量构建过程之外,不可能有真正的循环依赖,在这个过程中,您构建包含 B.dll 所需的所有内容但 B.dll 不需要的 A.dll,然后将其替换为已使用构建的新依赖新建的 B.dll 并包含依赖它的东西。最后,如此复杂的策略肯定不值得。
也可以构建网络模块,然后使用程序集链接器将它们组合成一个程序集,但同样,结果并不能证明所涉及的努力是合理的。