C# 在C语言中,接口和其他依赖项应该放在哪里?

C# 在C语言中,接口和其他依赖项应该放在哪里?,c#,interface,C#,Interface,我所说的其他依赖性是指抽象类和其他任何东西 我有一个dll形式的项目,它需要一个特定的接口,IInput。测试项目也需要此接口,因此我将此接口放置在主项目中,而主项目又是一个单独的exe程序集 这是因为当我将所有东西连接在一起时,最终主项目将需要使用这个接口。现在我遇到的问题是,当我试图在主项目中添加一个对dll的引用时,我收到了一个循环依赖项 我以前从未遇到过这个问题,也不知道最好的解决方法。作为一个临时修复,我已经将接口移动到单独的dll中,但很快我将在主项目中需要它,所以我回到了第一步 编

我所说的其他依赖性是指抽象类和其他任何东西

我有一个
dll
形式的项目,它需要一个特定的
接口
IInput
。测试项目也需要此接口,因此我将此接口放置在主项目中,而主项目又是一个单独的exe程序集

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

我以前从未遇到过这个问题,也不知道最好的解决方法。作为一个临时修复,我已经将接口移动到单独的dll中,但很快我将在主项目中需要它,所以我回到了第一步

编辑:

我应该提到设计的,所以就这样

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


所以菜单需要这个输入,但是跑步者也需要。运行程序项目(exe)将需要输入,因此我需要再次输入。

由于接口不应与测试项目或主项目有任何关联,只需将其移动到单独的程序集,并从测试和主项目引用此程序集即可

MySolution
 |->Interfaces.dll
 |->MainProject.exe (references Interfaces.dll)
 |->TestProject.exe (references Interfaces.dll)

为什么不这样设置结构:

Solution
  + Project With Interface
    - IInput
  + Main Project/UI
    -> Reference "Project With Interface"
  + Test Project
    -> Reference "Project With Interface"

没有循环引用,而且在引用用法上非常直截了当

循环依赖项表示您的设计存在问题。接口应该放在其定义所属的任何地方。如果您有两个相互依赖的项目,它们可能属于一个项目,或者(更有可能)——如果您的dll是主项目使用的“真实”库,则将接口放入dll中


我这样说是因为我假设“dll”是指“类库”。如果你字面上指的是一个编译后的dll,你不能对其进行修改,那么就把接口放在一个新的库中。

我认为接口应该在dll中,主项目应该引用dll,并且有一个实现接口的适配器类。我想,测试项目将引用主项目和dll。

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

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


/克劳斯(Klaus)

我就是这么想的,但我从来没有听说过只针对几个接口的单一组件。我倾向于使用“BusinessEntities”项目,并将任何接口保留在那里,无论是针对几个接口还是大量接口。效果很好。