监视类和子类中的所有事件

时间:2010-04-25 03:53:44

标签: .net vb.net events reflection tracing

我想知道是否有人可以帮助我。我有一个控制台应用程序,我用它来调试各种组件,我开发它们。

每次在我实例化的对象或其实例化的任何内容中触发事件时,我都希望能够登录到控制台[ad infinitum]。我通常不会看到这些事件中的一些,因为它们被链条消耗得更远了。理想情况下,我可以记录所有公共和私人活动,但如果只有公开活动,我可以忍受。

我用谷歌搜索了,所有我能找到的是如何监控目录 - 所以我不确定这是不可能还是只是有一个我不知道的名字。

我所追求的信息类似于异常中发现的信息 - 目标站点,源,堆栈跟踪等......

我可以通过某种方式通过反思来做到这一点吗?

如果有人能告诉我这是否有可能并且可能指出一些好的资源,我会非常感激。

非常感谢

基本

让您了解控制台应用程序:

Sub Main()
    Container = ContainerGenerate.GenerateContainer()
    Dim TemplateID As New Guid("5959b961-b347-46bc-b1b6-cba311304f43")
    Dim Templater = Container.Resolve(Of Interfaces.Mail.IMailGenerator)()
    Dim MyMessage = Templater.GenerateMail(TemplateID, Nothing, Nothing)
    Dim MySMTPClient = Container.Resolve(Of SmtpClient)()
    MySMTPClient.Send(MyMessage)
    Finish()
End Sub

2 个答案:

答案 0 :(得分:2)

您可以使用Unity容器的拦截功能进行跟踪: http://www.alexthissen.nl/blogs/main/archive/2009/03/25/using-unity-to-do-poor-man-s-tracing.aspx

也可以从任何分析器中提取调用堆栈。像这样: alt text http://i.msdn.microsoft.com/cc135981.dottrace_L(it-it).gif

答案 1 :(得分:1)

框架中没有任何内置功能可以让您执行此操作。有可能使用反射,虽然我不确定我会推荐它。以下代码显示了您获取类型的所有成员的列表:

  Try
     Dim myObject As New [MyClass]()
     Dim myMemberInfo() As MemberInfo

     ' Get the type of 'MyClass'.
     Dim myType As Type = myObject.GetType()

     ' Get the information related to all public member's of 'MyClass'. 
     myMemberInfo = myType.GetMembers()

     Console.WriteLine(ControlChars.Cr + "The members of class '{0}' are :" + ControlChars.Cr, myType)
     Dim i As Integer
     For i = 0 To myMemberInfo.Length - 1
        ' Display name and type of the concerned member.
        Console.WriteLine("'{0}' is a {1}", myMemberInfo(i).Name, myMemberInfo(i).MemberType)
     Next i

  Catch e As SecurityException
     Console.WriteLine(("Exception : " + e.Message.ToString()))
  End Try

在循环中,您需要确定该成员是否为事件,如果是,则将事件处理程序挂钩到它。