现在的位置: 首页 > 综合 > 正文

异类HOW TO:适时弹出指示框(六)

2012年03月31日 ⁄ 综合 ⁄ 共 3305字 ⁄ 字号 评论关闭
Author:水如烟

日志的实现:
MethodLogAttribute.vb

Namespace uRemoting.MethodWatcher
    
<AttributeUsage(AttributeTargets.Class)> _
    
Public Class MethodLogAttribute
        
Inherits MethodWatcherBaseAttribute

        Protected Overrides Function GetMethodWatcherProperty() As MethodWatcherBaseProperty
            
Return New MethodLogProperty
        
End Function
    
End Class

End Namespace

MethodLogProperty.vb

Namespace uRemoting.MethodWatcher

    Public Class MethodLogProperty
        
Inherits MethodWatcherBaseProperty

        Protected Overrides Function CreateSink(ByVal nextSink As System.Runtime.Remoting.Messaging.IMessageSink) As System.Runtime.Remoting.Messaging.IMessageSink
            
Return New MethodLogSink(nextSink)
        
End Function

    End Class

End Namespace

MethodLogSink.vb

Imports System.Runtime.Remoting.Messaging

Namespace uRemoting.MethodWatcher

    Public Class MethodLogSink
        
Inherits MethodWatcherBaseSink

        Sub New(ByVal nextSink As IMessageSink)
            
MyBase.New(nextSink)
        
End Sub

        Protected Overrides ReadOnly Property MethodWatcherAppendAttributeType() As System.Type
            
Get
                
Return GetType(MethodLogAppendAttribute)
            
End Get
        
End Property
    
End Class

End Namespace

MethodLogAppendAttribute.vb

Namespace uRemoting.MethodWatcher
    
<AttributeUsage(AttributeTargets.Class, allowmultiple:=True)> _
    
Public NotInheritable Class MethodLogAppendAttribute
        
Inherits MethodWatcherAppendBaseAttribute

        Sub New(ByVal methodName As String)
            
MyBase.New(methodName)
        
End Sub

    End Class

End Namespace

MethodLogCenter.vb

Imports System.Runtime.Remoting.Messaging

Namespace uRemoting.MethodWatcher

    Public Class MethodLogCenter
        
Inherits MethodWatcherCenter

        Public Sub Ready()
            Remove()
            
AddHandler MethodCallBegin, New BeforeMethodCallHandle(AddressOf WriteMethodCallBegin)
            
AddHandler MethodCallOver, New AfterMethodCallHandle(AddressOf WriteMethodCallOver)
        
End Sub

        Public Sub Remove()
            
RemoveHandler MethodCallBegin, New BeforeMethodCallHandle(AddressOf WriteMethodCallBegin)
            
RemoveHandler MethodCallOver, New AfterMethodCallHandle(AddressOf WriteMethodCallOver)
        
End Sub

        Private Sub WriteMethodCallBegin(ByVal callMsg As IMethodCallMessage, ByVal MethodAppendType As System.Type)
            
If MethodAppendType.Equals(GetType(MethodLogAppendAttribute)) Then
                Console.WriteLine(
"{0}({1},{2})", callMsg.MethodBase.DeclaringType.FullName + "+" + callMsg.MethodName, callMsg.GetArg(0), callMsg.GetArg(1))
            
Else
                Console.WriteLine(
"MethodOtherBeing:" + MethodWatcherCommon.GetFullMethodName(callMsg, MethodAppendType))
            
End If

        End Sub

        Private Sub WriteMethodCallOver(ByVal replyMsg As IMethodReturnMessage, ByVal MethodAppendType As System.Type)
            
If MethodAppendType.Equals(GetType(MethodLogAppendAttribute)) Then
                Console.WriteLine(
"{0} Result is {1}", replyMsg.MethodBase.DeclaringType.FullName + "+" + replyMsg.MethodName, replyMsg.ReturnValue)
            
Else
                Console.WriteLine(
"MethodOtherOver:" + MethodWatcherCommon.GetFullMethodName(replyMsg, MethodAppendType))
            
End If
        
End Sub

    End Class

End Namespace

抱歉!评论已关闭.