解决循环依赖问题

8

我在Visual Studio解决方案中有两个类项目。由于项目的性质,两个项目都需要相互引用彼此的服务(可以想象成“你帮我,我帮你”的状况)。

但是,由于项目a已经引用了项目b,所以Visual Studio(2010)不允许我从项目a中添加对项目b的引用。

有哪些策略可以解决这种循环依赖关系呢?

谢谢!

6个回答

8

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

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

alt text

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

alt text


4

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

另一方面,如果这两个项目耦合度非常高,那么您也应该考虑将它们合并成一个单独的项目。


2

唯一的问题是“必须打破它”。要么将它们分开,要么将它们合并成一个单独的模块。


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

0
我们曾经遇到过类似的情况,需要从项目A中调用dbCon类以获取数据库连接字符串并传递给项目B。我们通过将其存储在数据库的dbconfig表中,并将其作为参数传递给项目B来解决了这个问题。

0

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

除了一些增量构建过程(其中您构建包含B.dll需要的所有内容但不包含B.dll所需内容的A.dll,然后在之后用新构建的B.dll构建它并包含依赖于它的内容),没有可能有真正的循环依赖关系。最终,这样复杂的策略肯定不值得。

也可能可以构建netmodules,然后使用Assembly Linker将它们合并成一个程序集,但是再次,结果不会证明付出的努力是值得的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接