0

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

我的意思是,我已经ClassA并且希望将其OnMethodBoundaryAspect仅应用于从ClassA.

4

1 回答 1

0

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

  • MulticastInheritance.None是默认行为。派生类不继承 Aspect。
  • MulticastInheritance.Strict使派生类继承基类成员的方面,即覆盖方法。
  • MulticastInheritance.Multicast使派生类完全继承方面,即好像您已经在派生类上指定了方面。

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

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

因此,“仅对给定类的子类的所有公共方法”将满足以下条件:

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

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

于 2015-01-07T14:18:22.807 回答