PostSharp OnMethodBoundaryAspect

3
我正在使用postsharp 1.5和OnMethodBoundaryAspect处理一个方面。 我希望我的方面默认具有以下行为:
1-如果在类级别使用属性,则该方面仅应用于公共方法。
2-方面的用户可以将其放入私有或受保护的方法中。
如果我使用此[MulticastAttributeUsage(MulticastTargets.Method,TargetMemberAttributes = MulticastAttributes.Public)],则点1有效,但是点2甚至无法构建,因为不兼容。
然后我尝试使用:AttributeTargetTypeAttributes = MulticastAttributes.Public; 在方面的构造函数中,但不起作用。
非常感谢您的帮助。
2个回答

5

很遗憾,无法使用单个方面类来实现您的要求。

您可以使用三个方面类:

public abstract class MyAspect : OnMethodBoundaryAspect
{
}

[MulticastAttributeUsage(..., 
      TargetMembersAttributes = MulticastAttributes.Public )]
[AttributeUsage(AttributeTargets.Class)]
public class ClassLevelAspect : MyAspect
{
}

[MulticastAttributeUsage(..., 
     TargetMembersAttributes = MulticastAttributes.NonPublic )]
[AttributeUsage(AttributeTargets.Method)]
public class MethodLevelAspect : MyAspect
{
}

-gael


谢谢Gael,我会按照这种方法去做。 - José F. Romaniello

0
另一个可能的方法是使用IAspectProvider,它可以动态提供方面。
创建这种方面的示例,为常规方法和构造函数注入不同的方面可以在PostSharp关于Aspect Providers的培训中找到。
在您的情况下,您可以使用提供的示例,并根据'ReflectedType.IsPublic'条件决定要注入哪个方面。

1
我知道原问题是大约2年前发布的,但我刚刚遇到了同样的问题,并发现这种方法更适合我的需求。 - avivr

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