特定のクラスの子クラスのすべてのパブリック メソッドだけに PostSharp アスペクトが適用されるように指定できますか?
つまり、から継承したクラスで定義されたパブリック メソッドだけに を適用ClassA
したいと考えています。OnMethodBoundaryAspect
ClassA
その動作を制御するに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 によって拡張されていないプロジェクトのクラスから派生した場合、アスペクトの動作は継承されません。