发现代码合同有点奇怪,我想知道是否有人知道原因......
好的,所以一些代码示例的时间:
装配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&lt; Campaign&gt;”用蓝线表示找不到实际错误的类型:
The type or namespace name 'IServiceCodeContract' could not be found (are you missing a using directive or an assembly reference?)
我有一个从程序集2到程序集1的引用,我已经导入了“System.Diagnostics.Contracts”命名空间和缺少的类所在的命名空间。 该类被声明为public并显示在反射器内,所以为什么不能找到它呢?
程序集之间的代码契约继承是否存在某些问题?
编辑:
只是想一想,从另一个程序集继承一个契约基类会不会有问题...这个东西在编译时不会做一些疯狂的二进制注入事情吗?
答案 0 :(得分:1)
派生类(ICampaignServiceCodeContract)的合约类不应该派生出除注释类之外的任何东西(在本例中为ICampaignService)。
您可以保留从基本接口/类继承的所有方法未实现(使用VS生成的默认主体),并仅在特定于此类/接口的方法中写入契约。
-MaF