通过其他依赖关系,我的意思是抽象类,以及其他任何东西。
我的项目形式为dll
,需要某个interface
,IInput
。测试项目也需要这个接口,所以我将这个接口放在我的主项目中,而后者又是一个单独的exe程序集。
这是因为当我将所有内容连接在一起时,主项目最终将需要使用此接口。现在我遇到的问题是当我尝试将主项目中的引用添加到dll时引用了主项目我收到了循环依赖。
我之前从未遇到过这个问题,也不知道对付它的最佳方法。作为一个临时修复,我已经将界面移动到单独的dll,但很快我就会在主项目中需要它,所以我回到了第一个。
修改
我应该提到设计,所以这里就是。
Menu
Menu Tests
Runner
菜单具有IInput,它实际上是第三方库的接口适配器,以便进行单元测试。
因此菜单需要输入,但跑步者也是如此。转轮项目(exe)将需要输入,所以我将再次需要IInput。
答案 0 :(得分:6)
由于界面不应与测试项目或主项目有任何联系,只需将其移动到单独的程序集,并从test和main引用此程序集。
MySolution
|->Interfaces.dll
|->MainProject.exe (references Interfaces.dll)
|->TestProject.exe (references Interfaces.dll)
答案 1 :(得分:2)
为什么不设置这样的结构:
Solution
+ Project With Interface
- IInput
+ Main Project/UI
-> Reference "Project With Interface"
+ Test Project
-> Reference "Project With Interface"
没有循环引用,而且它在参考用法上非常直接。
答案 2 :(得分:1)
循环依赖关系表示您的设计存在问题。接口应该在其定义所属的任何地方。如果你有两个相互依存的项目,它们可能属于一个项目,或者(更有可能) - 如果你的dll是你的主要项目利用的“真实”库 - 然后放入界面在dll中。
我这样说是假设“dll”是指“类库”。如果您的字面意思是您无法进行修改的已编译dll,请将该接口放在新库中。
答案 3 :(得分:0)
我认为接口应该在dll中,主项目应该引用dll,并且有一个实现接口的适配器类。测试项目将引用主项目和dll,我想。
答案 4 :(得分:0)
我不认为这个问题只与接口有关。它也可能是一个抽象类或其他东西。听起来你的整体架构有问题。
但是,要解决此问题,只需创建一个包含该接口的新类库,其他三个项目即可引用该接口。
/克劳斯