PostSharp OnMethodBoundaryAspect

时间:2010-03-24 11:32:22

标签: c# postsharp

我正在研究postharp 1.5和OnMethodBoundaryAspect的一个方面。 我希望我的方面默认具有以下行为:

1 - 如果在类级别使用该属性,则该方面仅应用于 PUBLIC 方法。

2 - 方面的用户可以将方面放在私有或受保护的方法中。

如果我用这个 [MulticastAttributeUsage( MulticastTargets.Method,TargetMemberAttributes = MulticastAttributes.Public)] 第1点有效,但案例2甚至没有建立因为不相容。

然后我尝试使用: AttributeTargetTypeAttributes = MulticastAttributes.Public; 在方面的构造函数中,但不起作用。

非常感谢你。

2 个答案:

答案 0 :(得分:5)

不幸的是,没有办法使用SINGLE方面类来实现您的要求。

您可以使用三个方面类:

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

答案 1 :(得分:0)

另一种可能的方法是使用IAspectProvider,它动态地提供方面。

创建此类方面的示例,为常规方法和构造函数注入不同的方面可以在关于Aspect Providers的PostSharp培训中找到。

在您的情况下,您可以使用提供的样本,并根据'ReflectedType.IsPublic'条件决定您希望注入哪个方面。