IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Récupérer l'assembly qui a appelé une méthode


Sujet :

Windows Forms

  1. #1
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut Récupérer l'assembly qui a appelé une méthode
    Salut,

    Je suis en train de développer une application avec architecture plugin. Chacun de mes plugins contient sa propre configuration.

    J'ai une classe dans une DLL qui gère la configuration de toute l'application (y compris les plugins)

    Mon application principale charge évidemment les plugins. plusieurs plugins appellent la méthode Save de la classe qui gère les plugins.


    Comment savoir depuis quelle Assembly la méthode a été applée?

    J'ai tenté les différentes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Assembly.GetEntryAssembly()	
    Assembly.GetExecutingAssembly()	
    Assembly.GetCallingAssembly()
    mais aucune ne me retourne ce que je veux.


    est-ce possible de faire ça?
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  2. #2
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Tu peux récupérer la StackTrace, en extraire la méthode appelante, le type de cette méthode, l'assembly de ce type.
    ಠ_ಠ

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    ou la méthode inverse, qui est d'ajouter un argument à Save permettant de lui fournir l'information en question sans recherche dans la pile.

    J'utilise ce genre de méthode dans mon application à plugins, et pour certaines parties de code que j'interdis d'accès aux plugins, j'utilise la méthode préconisée par Guulh :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //////////////////////////////////////////////////////////////////////////////////////////////
            //                 DECLENCHE UNE EXCEPTION EN CAS D'ACCES NON AUTORISE                      //
            //////////////////////////////////////////////////////////////////////////////////////////////
            //--------------------------------------------------------------------------------------------
            /// <summary>Vérifie que l'appelant de la propriété ou de la méthode est bien MdiMain, sinon
            /// <para>déclenche une exception. Utilisé par les classes de base de Domocan</para></summary>
            /// <param name="errorMessage">Message décrivant l'erreur</param>
            //--------------------------------------------------------------------------------------------
            public static void VerifyIfIsMdiMain(string errorMessage)
            {
                if (new StackTrace().GetFrame(2).GetMethod().DeclaringType.Name != "MdiMain")
                    throw new InvalidOperationException(errorMessage);
            }
    Note le "2" dans GerFrame, puisque le test s'effectue dans une méthode appelée à partir de la méthode qui doit faire la vérification (un niveau de plus dans la pile), sinon c'est évidemment "1" qu'il faut mettre.

    A+
    Claude

Discussions similaires

  1. [Reflection] Comment connaitre le nom de la classe qui appelle une méthode?
    Par framus.class dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 09/06/2008, 09h13
  2. Réponses: 9
    Dernier message: 10/05/2007, 17h57
  3. Savoir "qui" appelle une méthode ?
    Par JohnNC dans le forum Langage
    Réponses: 4
    Dernier message: 22/03/2007, 16h22
  4. Réponses: 7
    Dernier message: 19/03/2007, 20h25
  5. Réponses: 2
    Dernier message: 19/10/2006, 15h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo