PostSharp和基于层次结构的方面继承

3
根据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个回答

1
问题中的示例代码应该按照文档所述正常工作。问题是由于PostSharp代码中的一个错误导致的,已向PostSharp团队报告了此问题。该修复程序将在即将发布的3.1版本的其中一个版本中实施。
更新:这个错误已经在PostSharp 3.1.33版本中得到修复。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接