0

特定のクラスの子クラスのすべてのパブリック メソッドだけに PostSharp アスペクトが適用されるように指定できますか?

つまり、から継承したクラスで定義されたパブリック メソッドだけに を適用ClassAしたいと考えています。OnMethodBoundaryAspectClassA

4

1 に答える 1

0

その動作を制御するにAttributeInheritanceは、のプロパティを使用する必要があります。MulticastAttribute

  • MulticastInheritance.Noneがデフォルトの動作です。アスペクトは派生クラスには継承されません。
  • 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 によって拡張されていないプロジェクトのクラスから派生した場合、アスペクトの動作は継承されません。

于 2015-01-07T14:18:22.807 に答える