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

C# Discussion :

Rechargement Plugin via MEF


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 43
    Par défaut Rechargement Plugin via MEF
    Bonjour,
    Je gère des plugin via MEF. Tout les plugin se chargent bien. Je souhaite maintenant pouvoir ajouter d'autre plugin sans arrêter l'application et que les information des plugin déjà présent soient conservé. J'ai donc essayé ceci qui se lance quand je clique sur un bouton recharger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
            int i = 0;
            List<string> listPluginPresent = new List<string>();
            static Dictionary<string, IPlugin> _Plugins;
     
            //Charge les plugins qui correspondent à l'interface IPlugin
            public object chargementPlugins()
            {
                i=0;
                PluginLoader loader = new PluginLoader("Plugin");
                _Plugins = new Dictionary<string, IPlugin>();
                IEnumerable<IPlugin> plugins = loader.Plugins;
     
                Button pluginButton = new Button();
                Button startButton = new Button();
                Button finButton = new Button();
     
                foreach (IPlugin plugin in plugins)
                {
     
                    bool dejaVu = false;
                    string titlePlugin = plugin.nomPlugin();
                    foreach (string pp in listPluginPresent)
                    {
                        if (pp == titlePlugin)
                        {
                            SetInfos(0, "deja vu", DateTime.Now, titlePlugin);
                            dejaVu = true;
                            break;
                        }
                    }
                    if (dejaVu == false)
                    {
                        listPluginPresent.Add(titlePlugin);
                        plugin.Setinfos += SetInfos;
                        TabPage myTabPage = new TabPage(titlePlugin);
                        myTabPage.Tag = titlePlugin;
                        tabControl1.TabPages.Add(myTabPage);
                        _Plugins.Add(myTabPage.Tag.ToString(), plugin);
                        i = 1;
                    }
                }
     
                foreach (TabPage pages in tabControl1.TabPages)
                {
                    if (i == 1)
                    {
                        if (_Plugins[pages.Text].returnCreerBouton() == true)
                        {
                            pluginButton = new Button();
                            pluginButton.Location = new Point(600, 30);
                            pluginButton.Text = pages.Text;
                            pages.Controls.Add(pluginButton);
                        }
     
                        startButton = new Button();
                        startButton.Location = new Point(50, 20);
                        startButton.Text = "start";
                        pages.Controls.Add(startButton);
                        startButton.Click += new EventHandler(start_Click);
     
                        finButton = new Button();
                        finButton.Location = new Point(50, 40);
                        finButton.Text = "fin";
                        pages.Controls.Add(finButton);
                        finButton.Click += new EventHandler(fin_Click);
                    }
                }
                return plugins;
            }
    Cependant, je ne peux plus utiliser les plugin qui étaient là avant, j'ai l'erreur : "la clé donné était absente du dictionnaire.D'après ce que je comprends, il me recharge tout à zéro et comme le plugin était déjà là avant il ne le recrée pas.
    Sauriez-vous me dire comment faire pour charger uniquement ceux qui sont nouveau?
    Merci d'avance !

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Je ne suis pas familier avec MEF.

    Il semble que tu gère déjà leur présence avec dejaVu

    Quel est le code qui te génère l'exception ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 43
    Par défaut
    Citation Envoyé par ericlm128 Voir le message

    Quel est le code qui te génère l'exception ?
    Dès que je fait appel à une méthode qui nécessite un plugin, ce qui est lié au fait que mes plugin sont "écrasé" quand je fait " IEnumerable<IPlugin> plugins = loader.Plugins;" <-- cela recharge tout

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Je ne suis pas tellement plus avancé.

    Ce que je comprend c'est que la méthode native MEF ne gère pas l'ajout seul d'un plugin et recharge tout.
    Malgré tout ton exception parle d'un dictionnaire qui ne semble pas être du ressort de MEF.

    Il faut voir ton code et analyser pourquoi il n'est plus présent après rechargement, en mode pas à pas/debug tu trouvera surement pourquoi.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 43
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Il faut voir ton code et analyser pourquoi il n'est plus présent après rechargement, en mode pas à pas/debug tu trouvera surement pourquoi.
    Ok merci pour ton aide tu viens de me donner une bonne idée !

    EDIT : Une journée de perdu pour une ligne, c'est la vie que j'ai décidé de mener.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    static Dictionary<string, IPlugin> _Plugins = new Dictionary<string, IPlugin>();
    Il suffisait de mettre cette ligne en dehors de ma fonction, sinon mon dictionnaire se réinitialisais à chaque fois !

Discussions similaires

  1. [AJAX] Rechargement Javascript via AJAX
    Par dragonfly dans le forum AJAX
    Réponses: 7
    Dernier message: 06/09/2010, 14h36
  2. Lancer JUnit tests d'un plugin via Ant
    Par DaveShot dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 26/02/2010, 16h28
  3. Paramètres pour installation plugin via CVS
    Par Mister Nono dans le forum Eclipse
    Réponses: 2
    Dernier message: 15/05/2009, 20h42
  4. publier et installer un plugin via eclipse update
    Par gnaoui_9999 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 28/04/2008, 13h11
  5. [Plugin][Lomboz]Erreur lancement tomcat via eclipse
    Par dodine dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 01/07/2004, 11h06

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