Мониторинг всех событий в классе и подклассах - PullRequest
0 голосов
/ 25 апреля 2010

Интересно, кто-нибудь может мне помочь? У меня есть консольное приложение, которое я использую для отладки различных компонентов по мере их разработки.

Я бы хотел иметь возможность входить в консоль каждый раз, когда происходит событие либо в объекте, который я создал, либо во всем, что он создается [до бесконечности]. Я бы не увидел некоторые из этих событий, как правило, из-за того, что они потребляются дальше по цепочке). В идеале я мог бы регистрировать все публичные и приватные события, но если бы была возможна только публичная, я мог бы жить с этим.

Я гуглил и все, что я могу найти, это как контролировать каталог - так что я не уверен, если это невозможно или просто имеет имя, которое я не знаю.

Информация, которую я ищу, похожа на информацию, найденную в исключении - целевой сайт, источник, трассировка стека и т. Д. *

Могу ли я как-нибудь сделать это с помощью размышлений?

Если бы кто-то мог сказать мне, если это вообще возможно, и, возможно, указать мне на хорошие ресурсы, я был бы очень благодарен.

Большое спасибо

Basic

Чтобы дать вам представление о консольном приложении:

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 ]

2 голосов
/ 25 апреля 2010

Вы можете использовать функцию перехвата контейнера Unity для выполнения трассировки: http://www.alexthissen.nl/blogs/main/archive/2009/03/25/using-unity-to-do-poor-man-s-tracing.aspx

Стек вызовов также можно извлечь из любого профилировщика. Как это: альтернативный текст http://i.msdn.microsoft.com/cc135981.dottrace_L(it-it).gif

1 голос
/ 25 апреля 2010

В Framework нет ничего, что позволило бы вам это сделать. Это возможно с помощью отражения, хотя я не уверен, что рекомендовал бы это. Следующий код показывает вам, чтобы получить список всех членов типа:

  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

В цикле вам необходимо определить, является ли элемент событием, и если да, подключить к нему обработчик события.

...