[英]c# interface references
大家好
目前,我具有以下参考结构:
DSFinalProject引用了"DAL"
项目和"DataStructure"
项目。
DataStructure
也参考了DAL
项目…
现在,我希望DSFinalProject
不会引用DAL
层,但能够使用该类中的接口。
有什么方法可以将DAL项目中的接口"tunnel"
到DSFinalProject,而无需在它们之间进行实际引用?
也许正在使用DataStructure项目? 还是其他?
在此先感谢您的帮助:)
我不知道在没有引用项目(或程序集)的情况下从DSFinalProject引用DAL项目内的接口(或其他任何方式)的方法。
如果您认为它们可以使依赖项更加简洁,则可以将它们移至另一个项目中(如果将接口放入DataStructure项目中),则会遇到需要DAL且需要DAL的循环引用。
最简单的方法是将它们放在DataStructure
,这还不错,因为任何引用接口的内容也都需要引用DataStructure
。
我的投票是将它们放在那里,直到遇到需要将接口放在单独的程序集中的情况。
我不相信您有什么要求。 如果考虑序列化对象时会发生什么,您仍然需要该程序集来提供有关字段在数据流中的布局方式的底层结构。 它需要接口中的代码说前4个字节为double等等。
因此,唯一要做的就是将您的接口移动到新的interfaces.dll中,所有内容都可以引用该接口。 您将在许多示例(包括EnterpriseLibrary)中看到这种模式的重复。
但是...您犯了一个经典错误。 您为什么将代码拆分成这么多个项目? 实际上,应该将项目视为代码的运行时打包,而不是设计时间分隔机制。 通过拆分为多个程序集,您可以执行三件事。
看一下这个示例, 有关如何优化代码的提示确实看到了随着解决方案变得越来越复杂而将发生的情况。
不用像这样拆分它,而是使用名称空间,您仍然可以使用分隔符,但是不必使用太多的引用,现在可以通过类内部的using语句进行控制。 您将很容易看到,如果在设计为DSFinalProject层的类中使用DAL引用。 您可以只在项目下创建一个文件夹,然后在其中添加类。 摆脱所有项目,仍然拥有一个适当的分层系统。
随着解决方案的发展,请等到至少有两个可执行文件后再开始引入项目,然后考虑运行时的影响。 如果您总是要加载两个程序集,请将它们合并为一个(这些天我也见过一些开源项目,这些项目也使用ilmerge合并到第三方库中)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.