1

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 が自動的に表示されるようにする必要があります。

4

1 に答える 1

1

解決しました!!! 次のように属性を直接設定する必要があります。

<MulticastAttributeUsage(MulticastTargets.Method, Inheritance:=MulticastInheritance.Multicast)> 
于 2012-12-21T11:15:47.960 に答える