代码约定继承

本文关键字:继承 约定 代码 | 更新日期: 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