c#接口引用

时间:2012-09-21 13:01:30

标签: c# interface reference project

enter image description here

大家好

目前我有以下参考结构:

DSFinalProject引用了"DAL"项目和"DataStructure"项目。

DataStructure也引用了DAL项目......

现在我希望DSFinalProject不会引用DAL图层,但可以使用该类的接口。

有没有办法将"tunnel" DAL项目中的接口提供给DSFinalProject而不实际在它们之间进行引用?

也许使用DataStructure项目?还是其他什么?

提前感谢您的任何帮助:)

3 个答案:

答案 0 :(得分:1)

我不知道如何在没有对项目(或程序集)的引用的情况下从DSFinalProject引用DAL项目中的接口(或其他任何内容)。

如果您认为它使依赖关系更清晰,您可以将它们移动到另一个项目 - 如果您将接口放在DataStructure项目中 - 您将遇到需要DAL和DAL的循环引用需要它。

答案 1 :(得分:1)

最简单的方法是将它们放在DataStructure中,这不是太糟糕,因为引用接口的任何东西都需要引用DataStructure

我的投票是将它们放在那里直到你遇到需要将接口放在一个单独的程序集中的场景。

答案 2 :(得分:1)

我不相信你有什么问题。如果您考虑序列化对象时会发生什么,您仍然需要程序集来提供字段在数据流中的布局方式的低级结构。它需要接口中的代码来说前4个字节是双精度等等。

所以唯一要做的就是将你的接口移动到一个可以被所有东西引用的新interfaces.dll中。您将在许多示例中重复使用此模式,包括EnterpriseLibrary。

...然而  你犯了一个经典的错误。为什么要将代码分成如此多的项目?项目确实应该被认为是我们代码的运行时包装,而不是设计时间隔离机制。通过拆分成这么多的程序集,你可以做三件事。

  1. 降低构建系统的速度,因为编译器会更多地工作来获取其他程序集。
  2. 您放慢Visual Studio的速度,因为它更加努力地加载所有项目并保持它们之间的引用。我曾经为140个项目做过一个解决方案,花了15分钟才打开(但我总是早上喝咖啡)。
  3. 你减慢了运行时性能,因为DotNet必须搜索另外4k dll(这是最小的,即使只有一行代码)。尝试查看融合日志或使用SysMon查看这个简单操作涉及多少工作。
  4. 看一下这个例子Hints on how to optimise code看看你的解决方案变得更复杂会发生什么。

    不是像这样拆分,而是使用命名空间,你仍然会有分离,但是你现在可以通过类中的using语句来控制,而不必使用这么多引用。您将很容易地看到您是否在设计为DSFinalProject层的类中使用DAL引用。您只需在项目下创建一个文件夹,然后在那里添加您的类。摆脱所有项目,仍然有一个适当的分层系统。

    随着解决方案的增长,在开始引入项目之前,请等到至少有两个可执行文件,然后考虑运行时的影响。如果您总是要加载两个程序集,请将它们合并为一个(我已经看到了一些开源项目,这些项目使用了ilmerge来合并第三方库)。