我正在使用PostSharp1.5和OnMethodBoundaryAspect进行一个方面的研究。默认情况下,我希望我的方面具有以下行为:
1-如果属性在类级别上使用,则方面只应用于公共方法。
2-方面的用户可以将方面放在私有或受保护的方法中。
如果我使用这个MulticastAttributeUsage( MulticastTargets.Method,TargetMemberAttributes = MulticastAttributes.Public),那么点1可以工作,但是因为不兼容,用例2甚至不构建。
然后,我尝试在方面的构造函数中使用: AttributeTargetTypeAttributes = MulticastAttributes.Public;,但不起作用。
先谢谢你。
发布于 2010-03-24 12:36:45
不幸的是,没有办法使用一个方面类来实现您的需求。
您可以使用三个方面类:
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
发布于 2012-04-24 07:47:21
另一种可能的方法是使用IAspectProvider,它动态地提供方面。
创建此类方面的示例(为常规方法和构造函数注入不同方面)可以在关于PostSharp的方面提供者培训中找到。
在您的情况下,您可以使用所提供的示例,并根据“ReflectedType.IsPublic”条件决定要注入哪个方面。
https://stackoverflow.com/questions/2507224
复制相似问题