2010-04-25 4 views
0

Je me demande si quelqu'un peut m'aider. J'ai une console App que j'utilise pour déboguer divers composants au fur et à mesure que je les développe. Je souhaiterais pouvoir me connecter à la console à chaque fois qu'un événement est déclenché soit dans l'objet que j'ai instancié, soit dans tout ce qui est instancié [ad infinitum]. Je ne verrais pas certains de ces événements normalement parce qu'ils sont consommés plus loin dans la chaîne). Idéalement, je serais en mesure d'enregistrer tous les événements publics et privés, mais si seulement public est possible, je peux vivre avec cela. Je ai googlé et tout ce que je peux trouver est de savoir comment surveiller un répertoire - Donc, je ne suis pas sûr si ce n'est pas possible ou a simplement un nom que je ne connais pas.Surveillance de tous les événements d'une classe et sous-classes

Le genre d'information que je suis après est similaire à ce qui se trouve à une exception - site cible, Source, Trace de la pile, etc ...

ce que je pourrais faire peut-être cela par la réflexion d'une certaine manière?

Si quelqu'un pouvait me dire si c'est même possible et peut-être me signaler de bonnes ressources, je serais très reconnaissant.

Un grand merci

Basic

Pour vous donner une idée de la console App:

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 

Répondre

1

Il n'y a rien construit dans le cadre qui vous permettra de le faire. C'est possible en utilisant la réflexion, même si je ne suis pas sûr que je le recommanderais. Le code suivant vous montre pour obtenir la liste de tous les membres d'un type:

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 

Dans la boucle, vous devez déterminer si le membre est un événement, et si oui, accrochez un gestionnaire d'événements à elle.

+0

Sons prometteurs - Je vais essayer et je reviendrai à vous – Basic

+0

Désolé pour la réponse très lente - Cela a été brûlé en arrière. On dirait que ça va faire - Merci. Il se sent toujours un peu maladroit mais semble être la meilleure réponse pour le moment. – Basic

2

Vous pouvez utiliser Interception fonction de l'unité conteneur pour faire le suivi: http://www.alexthissen.nl/blogs/main/archive/2009/03/25/using-unity-to-do-poor-man-s-tracing.aspx

La pile d'appel peut également être extrait de toute profileur. Comme ceci: alt text http://i.msdn.microsoft.com/cc135981.dottrace_L(it-it).gif

+0

+1 Merci - Il est vraiment utile de savoir que je peux le faire. J'espérais quelque chose d'un peu plus automatisé (c'est-à-dire que les choses sont écrites sur la console - je veux juste voir ce qui se passe pendant que l'application fonctionne) – Basic

Questions connexes