如何将postharp方面应用于给定类的子类中定义的方法?

时间:2015-01-06 18:37:42

标签: c# aop postsharp aspect aspects

我是否可以指定PostSharp方面仅应用于给定类的子类的所有公共方法?

我的意思是,我有ClassA并希望OnMethodBoundaryAspect仅应用于从ClassA继承的类中定义的公共方法。

1 个答案:

答案 0 :(得分:0)

您需要使用AttributeInheritance MulticastAttribute属性来控制该行为。

  • MulticastInheritance.None是默认行为。 Aspect不是由派生类继承的。
  • MulticastInheritance.Strict使派生类继承基类成员的方面,即在重写方法上。
  • MulticastInheritance.Multicast使派生类完全继承方面,即就像在派生类上指定了方面一样。

然后,您需要使用AttributeTargetMemberAttributes MulticastAttribute来指定应该应用属性的成员。在您的情况下,这将是AttributeTargetMemberAttributes = MulticastAttributes.Public

最后,您需要强制PostSharp不将该属性应用于基类本身,您可以在另一个属性实例上使用AttributeExclude属性在特定情况下禁用该方面。

所以,"对于给定类的子类的所有公共方法"将满足以下条件:

[MyAspect(AttributeInheritance = MulticastInheritance.Multicast, AttributeTargetMemberAttributes = MulticastAttributes.Public)]
[MyAspect(AttributeExclude = true)]
public class ClassA
{
    //...
}

请注意,这是编译时行为,您需要在从基类派生的所有项目上运行PostSharp,以使其按预期工作。如果您从未通过PostSharp增强的项目中派生类,则不会继承任何方面行为。