我是否可以指定PostSharp方面仅应用于给定类的子类的所有公共方法?
我的意思是,我有ClassA
并希望OnMethodBoundaryAspect
仅应用于从ClassA
继承的类中定义的公共方法。
答案 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增强的项目中派生类,则不会继承任何方面行为。