代码约定继承
本文关键字:继承 约定 代码 | 更新日期: 2023-09-27 18:25:00
发现代码契约有点奇怪,我想知道是否有人知道原因。。。
好的,所以一些代码样本的时间:
组件1:
[ContractClass(typeof(IServiceCodeContract<>))]
public interface IService<T> where T : class { ... }
[ContractClassFor(typeof(IService<>))]
public abstract class IServiceCodeContract<T> : IService<T> where T : class { ... }
public abstract class ServiceBase<T> : IService<T> where T : class { ... }
组件2:
[ContractClass(typeof(ICampaignServiceCodeContract))]
public class CampaignService : ServiceBase<Campaign>, ICampaignService { ... }
[ContractClassFor(typeof(ICampaignService))]
public abstract class ICampaignServiceCodeContract : IServiceCodeContract<Campaign>, ICampaignService { ... }
现在我的问题是。。。在最后一行代码中,编译器很好,直到我真正编译代码,然后它突出显示"IServiceCodeContract<Campaign>",并用一条蓝线表示找不到实际错误的类型:
The type or namespace name 'IServiceCodeContract' could not be found (are you missing a using directive or an assembly reference?)
我有一个从程序集2到程序集1的引用,并且我已经导入了"System.Diagnostics.Comments"命名空间和缺少类所在的命名空间。该类被声明为公共类,并显示在反射镜中,为什么它找不到它呢?
程序集之间的代码约定继承是否存在问题?
编辑:
只是想一想,从另一个程序集继承约定基类会不会有问题。。。这些东西不是在编译时做一些疯狂的二进制注入吗?
也张贴在这里:http://forums.asp.net/t/1770324.aspx/1
派生类(ICampaigServiceCodeContract)的约定类不应从其注释的类(在本例中为ICampaigservice)派生。
您可以保留从基本接口/类继承的所有方法未实现(使用VS生成的默认主体),并且只在特定于该类/接口的方法中编写约定。
-MaF