我正在研究postharp 1.5和OnMethodBoundaryAspect的一个方面。 我希望我的方面默认具有以下行为:
1 - 如果在类级别使用该属性,则该方面仅应用于 PUBLIC 方法。
2 - 方面的用户可以将方面放在私有或受保护的方法中。
如果我用这个 [MulticastAttributeUsage( MulticastTargets.Method,TargetMemberAttributes = MulticastAttributes.Public)] 第1点有效,但案例2甚至没有建立因为不相容。
然后我尝试使用: AttributeTargetTypeAttributes = MulticastAttributes.Public; 在方面的构造函数中,但不起作用。
非常感谢你。
答案 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'条件决定您希望注入哪个方面。