我在Visual Studio解决方案中有两个类项目。由于项目的性质,两个项目都需要相互引用彼此的服务(可以想象成“你帮我,我帮你”的状况)。
但是,由于项目a已经引用了项目b,所以Visual Studio(2010)不允许我从项目a中添加对项目b的引用。
有哪些策略可以解决这种循环依赖关系呢?
谢谢!
我在Visual Studio解决方案中有两个类项目。由于项目的性质,两个项目都需要相互引用彼此的服务(可以想象成“你帮我,我帮你”的状况)。
但是,由于项目a已经引用了项目b,所以Visual Studio(2010)不允许我从项目a中添加对项目b的引用。
有哪些策略可以解决这种循环依赖关系呢?
谢谢!
您可以采用两种典型的方法:
1) 将两个项目合并为一个项目。
2) 找到两个项目的共同点,并将它们因式分解成一个单独的第三个项目。
将独立服务(那些不依赖于其他项目的服务)重构为第三方类库,并让这两个项目都引用这个第三方类库。
另一方面,如果这两个项目耦合度非常高,那么您也应该考虑将它们合并成一个单独的项目。
唯一的问题是“必须打破它”。要么将它们分开,要么将它们合并成一个单独的模块。
可能的正确解决方案是将“项目a”和“项目b”的一部分拆分成一个“项目c”。然后A和B都依赖于C,而且两者都不依赖于另一个。
除了一些增量构建过程(其中您构建包含B.dll需要的所有内容但不包含B.dll所需内容的A.dll,然后在之后用新构建的B.dll构建它并包含依赖于它的内容),没有可能有真正的循环依赖关系。最终,这样复杂的策略肯定不值得。
也可能可以构建netmodules,然后使用Assembly Linker将它们合并成一个程序集,但是再次,结果不会证明付出的努力是值得的。