您的位置:首页 > 运维架构

采用AOP 的观点来 Log 所有方法的调用

2005-01-24 15:52 330 查看
微软中文和英文分别有两篇介绍
http://www.microsoft.com/china/MSDN/library/windev/COMponentdev/AspectOrientedProgrammingEnablesBetterCodeEncapsulationandReuse.mspx?pf=true http://msdn.microsoft.com/msdnmag/issues/03/03/ContextsinNET/default.aspx
AOP 的观点,在 Dotnet 中显的更容易实现。我写了一个简单的来自,来log 对 Person 的所有调用

假设有这个的一个实体类。

<Log()> _ 

Imports System.Runtime.Remoting.Contexts

Imports System.Runtime.Remoting.Activation

Imports System.Runtime.Remoting.Messaging

然后就是property 和 SInk

Public Class LogSinkClass LogSink

    Implements IMessageSink

    Private _nextSink As IMessageSink

    Sub New()Sub New(ByVal nextSink As IMessageSink)

        _nextSink = nextSink

    End Sub

    Public Function AsyncProcessMessage()Function AsyncProcessMessage(ByVal msg As IMessage, ByVal replySink As IMessageSink) As IMessageCtrl Implements IMessageSink.AsyncProcessMessage

        'Debug.Assert(False)

        Return _nextSink.AsyncProcessMessage(msg, replySink)

    End Function

    Public ReadOnly Property NextSink()Property NextSink() As IMessageSink Implements IMessageSink.NextSink

        Get

            Return _nextSink

        End Get

    End Property

    Public Function SyncProcessMessage()Function SyncProcessMessage(ByVal msg As IMessage) As IMessage Implements IMessageSink.SyncProcessMessage

        LogMessage(msg)

        Return _nextSink.SyncProcessMessage(msg)

    End Function

    Public Sub LogMessage()Sub LogMessage(ByVal msg As IMessage)

        If TypeOf (msg) Is IConstructionCallMessage Then

            MessageBox.Show(String.Format("{0}的构造函数", CType(msg, IConstructionCallMessage).TypeName))

        End If

        If TypeOf (msg) Is IMethodMessage Then

            Dim msg1 As IMethodMessage = CType(msg, IMethodMessage)

            MessageBox.Show(String.Format("方法{0}参数个数{1}", msg1.MethodName, msg1.ArgCount))

        End If

    End Sub

End Class

然后调用person 的方法的时候,你会发现自定义sink 会按照 ImessageSink 的模型可以对流经该 sinnk 的msn 做自己的log 或者其他处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: