3

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

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

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

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

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

非常感谢您提前。

4

2 回答 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
{
}

-盖尔

于 2010-03-24T12:36:45.530 回答
0

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

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

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

于 2012-04-24T07:47:21.953 回答