PostSharp を使用して、システムで生成されたすべての例外を class でキャプチャしていますOnMethodBoundaryAspect
。それは正常に動作しますが、継承されたいくつかのクラスで例外を取得する必要がある場合、VB.NET でこれに対する解決策を見つけることができません。
このクラスMulticastAttributeUsageAttribute
には、validOn 属性が 1 つあるコンストラクターがあり、MultcastTargets のみを設定できます。クラスには という名前のパブリック プロパティがありますがInheritance
、これをコンストラクターで設定しても効果はありません。以下に例を示します。クラス B はクラス A を拡張し、属性アスペクトはクラス A で注釈が付けられます。クラス B がアスペクトによって自動的に認識されるようにする必要があります。
この問題を解決するにはどうすればよいですか?
コード
<Serializable()> _
<AttributeUsage(AttributeTargets.Class)> _
<MulticastAttributeUsage(MulticastTargets.Method)> _
Public Class ExceptionsAttribute
Inherits OnMethodBoundaryAspect
Public Overrides Sub OnEntry(ByVal Args As PostSharp.Aspects.MethodExecutionArgs)
MyBase.OnEntry(Args)
End Sub
Public Overrides Sub OnException(ByVal Args As PostSharp.Aspects.MethodExecutionArgs)
MyBase.OnException(Args)
End Sub
End Class
<Exceptions()> _
Public Class A
Public Sub MethodA()
End Sub
End Class
Public Class B
Inherits A
Public Sub MethodB()
End Sub
End Class
クラス A は、例外属性クラスによって注釈が付けられます。クラス B はクラス A を拡張するので、例外属性クラスで注釈を付ける必要なく、クラス B が自動的に表示されるようにする必要があります。