我想知道是否有人可以帮助我。我有一个控制台应用程序,我用它来调试各种组件,我开发它们。
每次在我实例化的对象或其实例化的任何内容中触发事件时,我都希望能够登录到控制台[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
答案 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
在循环中,您需要确定该成员是否为事件,如果是,则将事件处理程序挂钩到它。