我可以指定 PostSharp 方面将仅应用于给定类的子类的所有公共方法吗?
我的意思是,我已经ClassA
并且希望将其OnMethodBoundaryAspect
仅应用于从ClassA
.
您需要使用AttributeInheritance
of 的属性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 增强的项目中的类派生,则不会继承任何方面的行为。