PostSharp:方法***应该使用选择器自定义属性进行注释,因为它是主处理程序

时间:2019-04-24 13:06:07

标签: postsharp

此代码引发错误:Method ...OnEntry(...) should be annotated with a selector custom attribute because it is a master handler

[PSerializable]
public class LogRequestAttribute : MethodLevelAspect, IAspectProvider {
    public IEnumerable<AspectInstance> ProvideAspects(object target) {
        yield return new AspectInstance( target, new LogPlainRequest() );
    }
}

[PSerializable]
public class LogPlainRequest : IMethodLevelAspect {
    public void RuntimeInitialize(MethodBase method) {
    }
    [OnMethodEntryAdvice]
    public void OnEntry(MethodExecutionArgs args) {
    }
}

错误含义是什么?怎么了?

1 个答案:

答案 0 :(得分:1)

您可以将多个相关建议合并为一组(例如OnEntryOnExit)。这就是OnMethodBoundaryAspect自动为您执行的操作。将建议分组后,需要将其中一个指定为“主建议”。该组的属性和切入点必须在主建议中设置。

分配给主建议的切入点充当建议目标元素的选择器。例如,SelfPointcut仅选择方面的目标作为建议的目标。您可以在文档中找到更多信息和不同的切入点类型: https://doc.postsharp.net/advices

在上面的示例中,您可以将[SelfPointcut]属性应用于OnEntry方法,以消除错误消息。

[PSerializable]
public class LogPlainRequest : IMethodLevelAspect {
    public void RuntimeInitialize(MethodBase method) {
    }

    [OnMethodEntryAdvice]
    [SelfPointcut]
    public void OnEntry(MethodExecutionArgs args) {
    }
}