首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostSharp OnMethodBoundaryAspect

PostSharp OnMethodBoundaryAspect
EN

Stack Overflow用户
提问于 2010-03-24 11:32:21
回答 2查看 2.2K关注 0票数 3

我正在使用PostSharp1.5和OnMethodBoundaryAspect进行一个方面的研究。默认情况下,我希望我的方面具有以下行为:

1-如果属性在类级别上使用,则方面只应用于公共方法。

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

如果我使用这个MulticastAttributeUsage( MulticastTargets.Method,TargetMemberAttributes = MulticastAttributes.Public),那么点1可以工作,但是因为不兼容,用例2甚至不构建。

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

先谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-24 12:36:45

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

您可以使用三个方面类:

代码语言:javascript
复制
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

票数 5
EN

Stack Overflow用户

发布于 2012-04-24 07:47:21

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

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

在您的情况下,您可以使用所提供的示例,并根据“ReflectedType.IsPublic”条件决定要注入哪个方面。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2507224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档