通过层次结构进行PostSharp和方面继承

时间:2014-02-15 16:59:02

标签: c# inheritance interface aop postsharp

根据PostSharp文档,方面继承应该支持:

  

抽象,虚拟或接口方法的参数或返回值

但是在我的情况下,当这些受支持的元素组合在一起时,它似乎不支持继承。我有这个最小的代码来重现这个问题:

public interface IData { }

public interface ITest
{
    void DoSomething([Required] IData data);
}

public abstract class AbstractTest : ITest
{
    public abstract void DoSomething(IData data);
}

public class Test : AbstractTest
{
    public override void DoSomething(IData data)
    {
        throw new NotImplementedException();
    }
}

构建此代码的目的地为:

  

PostSharp.Patterns.Contracts.RequiredAttribute“无法应用于   方法   “PostSharpInheritance.AbstractTest.DoSomething(PostSharpInheritance.IData)@data”   因为它是抽象的。

如果我将Required属性从接口移动到抽象方法,则编译将成功。如果我在接口和抽象方法中放置Required属性,我将得到相同的错误。

如何在接口上放置属性(契约)而不丢失在实现该接口的类层次结构中使用抽象类的选项?

1 个答案:

答案 0 :(得分:1)

问题中的示例代码应该按照文档中的描述进行操作。问题是由PostSharp代码中的一个错误引起的,该错误已经报告给PostSharp团队。该修复程序将在即将推出的3.1版本中实现。

更新:此错误已在PostSharp版本3.1.33中修复。