接口和其他依赖项应该放在哪里?

时间:2009-12-02 11:51:52

标签: c# interface

通过其他依赖关系,我的意思是抽象类,以及其他任何东西。

我的项目形式为dll,需要某个interfaceIInput。测试项目也需要这个接口,所以我将这个接口放在我的主项目中,而后者又是一个单独的exe程序集。

这是因为当我将所有内容连接在一起时,主项目最终将需要使用此接口。现在我遇到的问题是当我尝试将主项目中的引用添加到dll时引用了主项目我收到了循环依赖。

我之前从未遇到过这个问题,也不知道对付它的最佳方法。作为一个临时修复,我已经将界面移动到单独的dll,但很快我就会在主项目中需要它,所以我回到了第一个。

修改

我应该提到设计,所以这里就是。

Menu
Menu Tests
Runner

菜单具有IInput,它实际上是第三方库的接口适配器,以便进行单元测试。

因此菜单需要输入,但跑步者也是如此。转轮项目(exe)将需要输入,所以我将再次需要IInput。

5 个答案:

答案 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)

我不认为这个问题只与接口有关。它也可能是一个抽象类或其他东西。听起来你的整体架构有问题。

但是,要解决此问题,只需创建一个包含该接口的新类库,其他三个项目即可引用该接口。

/克劳斯