基于PER-FILE的C#编译器常量?
是否可以在PER-FILE /项目项基础上定义编译器常量?
背景: 所以我想像这样分开我的DAL: abstract class ReadDAL abstract class WriteDAL abstract class ReadWriteDAL (multiple-inheritance from Read&Write-DAL). 不幸的是,这不起作用,因为C#不支持多重继承. 因此,解决此问题的一种方法是定义接口: abstract class ReadDAL : IReadDAL abstract class WriteDAL : IWriteDAL abstract class ReadWriteDAL : IReadDAL,IWriteDAL 但是,如果我这样做,每次更改其中一个DAL中的方法时,我都必须更改接口定义,并更改ReadWriteDAL中定义的方法,并且我必须在方法实现的某处复制粘贴,这意味着会有一个不合规的混乱局面. 我想我能做的是第二次添加相同的文件作为链接,并在每个项目项目的基础上定义: #if SOMECONSTANT // true if file is PartialReadDAL.cs public partial abstract class ReadDAL #else // false if "file" is link called "PartialReadWriteDAL.cs" symlinking to PartialReadDAL.cs public partial abstract class ReadWriteDAL #endif and here some implementation. 但我可以以某种方式定义每个文件的编译器常量吗? 解决方法
符号链接路线非常非常混乱.当被迫这样做时,我会通过将一些#defines作为预建步骤添加到相关文件中来实现.然后我会#if在代码中出现这些符号.我完全不喜欢这个:我的猜测是,即使我在构建结束后清除了这个标记,这也不会像我想的那样透明,所以它不会进入版本控制.
ReadWriteDAL是否包含它自己的某些状态,或者它只是调用ReadDAL和WriteDAL的方法调度程序?如果它只是一个调度程序,你可以考虑放弃实际的实现(ReadWriteDAL)并将调用传递给在组合根中注册的IReadDAL和IWriteDAL,使用dynamic proxy mechanism.我为Castle Windsor写了a tool like that. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |