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 :

Interface et déclarations d'objets et énumérations


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut Interface et déclarations d'objets et énumérations
    Bonsoir à tous,
    je vous soumet mon problème.
    Je dois développer une application dans laquelle je dois pouvoir activer des modules optionnels/plugins.
    Je cherche une technique pour y arriver.

    Actuellement, j'essaye en créant des interfaces par modules/plugins :
    mon programme fait référence à une dll contenant des interfaces.
    Mes modules/plugins font aussi référence à la dll contenant ces interfaces.
    Par réflexion, je cherche les dll modules/plugins présentes dans un dossier et j'active les boutons ...

    Cela fonctionne bien pour des méthodes simples, mais je butte sur plusieurs problèmes :

    - par exemple, une de mes classes modules/plugins dérive d'un PictureBox.
    Comment déclarer dans l'interface la méthode renvoyant cet objet dérivant de "pictureBox".
    En effet l'intefarce ne voit pas cet objet car elle ne pas fait pas référence à la dll module/plugin.

    - j'ai le même problème avec une énumération qui se situe dans la classe optionnelle et doit être utilisée
    dans MonProg

    Voilà, si quelqu'un pouvait m'aider ...

    De plus, mais s'il y a une meilleure solution je suis preneur pour gérer des plugins/options...

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par Tomcat31 Voir le message
    - par exemple, une de mes classes modules/plugins dérive d'un PictureBox.
    Ce n'est pas un plugin mais un contrôle à ce moment. Ca ne résoud pas ton problème, mais ça me semble bizarre comme plugin.

    Citation Envoyé par Tomcat31 Voir le message
    - j'ai le même problème avec une énumération qui se situe dans la classe optionnelle et doit être utilisée dans MonProg.
    Déclare l'énumération dans la DLL qui contient les interfaces.

    Citation Envoyé par Tomcat31 Voir le message
    De plus, mais s'il y a une meilleure solution je suis preneur pour gérer des plugins/options...
    Je n'ai pas eu l'occassion de tester, mais le framework MEF (Managed Extensibility Framework) est une piste à explorer : http://laedit.developpez.com/CSharp/...ramming_Guide/

  3. #3
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Bonjour à tous,
    merci StormimOn pour ton aide.

    Ce n'est pas un plugin mais un contrôle à ce moment
    Oui effectivement il y a un contôle personnalisé dans cette dll.

    mais ça me semble bizarre comme plugin
    J'explique rapidement.
    Mon programme permet, entre autre, de fusionner des étiquettes images (mon contrôle perso) sur une image principale. Cette partie permet de faire l'agencement graphique et de prévisualiser.
    Si la dll n'est pas présente, je ne doit pas avoir cette fonctionnalité.

    Je vais lire ta doc.
    Néanmoins, concernant le problème initial, est-ce que c'est quelque chose d'impossible ? J'aimerais bien avoir une explication, s'il vous plait.

    Cordialement.

  4. #4
    Membre éclairé Avatar de cs_ntd
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 598
    Par défaut
    Tu parle du problème de la PictureBox ?
    Je comprends pas ce qui té dérange

    Vu que ca hérite de pictureBox, tu peux très bien retourner un pictureBox, et l'utiliser après, grace un cast, comme ta classe qui est dans ta dll...

    Ou alors j'ai rien compris ? c'est possible aussi

  5. #5
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Merci cs_ntd pour ton aide.

    J'ai effectivement un contrôle perso qui hérite de PictureBox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class MonObjet :  PictureBox
    {
      ...
    }
    et dans une autre classe qui gère mon objet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class toto : Itoto
    {
      MonObjet AddImage()
      {
         MonObjet obj;
         ...
         return obj;
      }
    }
    Cet exemple de code fait partie de ma dll module/plugin, ok ?
    Cette classe implémente l'interface IToto.
    Pour que mon programme ne "plante" pas à l'exécution si la dll contenant ces objets n'est pas présente, mon programme fait référence à l'interface IToto, plutôt qu'à ma dll.

    Comment puis-je déclarer par exemple "MonObjet AddImage()" dans l'interface alors que l'interface ne connait pas le contenu de ma dll module/plugin ? J'ai des erreurs comme quoi "MonObjet" n'est pas connu.

    Je me suis peut être trompé de méthode (je l'ai trouvé en recherchant un peu partout) mais j'arrive pas...

    Je vais regarder ce que StormimOn m'a proposé, mais j'aimerais vraiment savoir si c'est impossible histoire aussi de bien comprendre et de m'améliorer...

    Cordialement.

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    Ayant réaliser un logiciel entièrement basé sur les plug-in, voici quelques conseils que je peux te fournir...

    1 - Avoir une liste de plug-in à charger (éventuellement, tu peux avoir un outil automatique qui te fait cette liste)

    2 - Quand tu charges un plug-in, tu peux chercher par reflexion si il implémente l'interface attendu. Si c'est le cas, tu peux créer une instance de la classe implémentant cette interface, sinon, tu rejettes le plug-in.

    3 - Le fait d'avoir une liste pour les plug-in permet d'éviter de charger toutes les DLL d'un repertoire et donc, de se retrouver avec plusieurs chargement d'une meme DLL dans le meme domaine d'application. Ce phénomène est très génant car il empeche ensuite d'éventuel affectation car pour .Net, chargé 2 fois la même DLL (une fois car référencé par le module Host, et une fois dynamiquement) lui amène à voir les 2 DLL comme 2 DLL Différentes...

    4 - J'ai regarde le MEF mais je trouve cela trop "pesant" par rapport à l'implémentation d'un système perso très facile à faire, rapide...

    Voilà. Mes conseils valent ce qu'ils valent, mais pour moi, je n'y ai trouvé que des avantages (maitrise total du code, du mécanisme, des interfaces, etc...)

  7. #7
    Membre éclairé Avatar de cs_ntd
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 598
    Par défaut
    Citation Envoyé par Tomcat31 Voir le message
    Comment puis-je déclarer par exemple "MonObjet AddImage()" dans l'interface alors que l'interface ne connait pas le contenu de ma dll module/plugin ? J'ai des erreurs comme quoi "MonObjet" n'est pas connu.

    Tu fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class toto : Itoto
    {
      PictureBox AddImage()
      {
         MonObjet obj;
         ...
         return obj;
      }
    }

    Comme ca, dans l'interface tu déclare PicureBox AddImage();
    Après, quand tu utilisera AddImage, tu pourra très bien faire MonObjet truc = (MonObjet)AddImage();

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sessions avant ou après déclaration des objets PHP
    Par tchoukapi dans le forum Langage
    Réponses: 2
    Dernier message: 22/08/2008, 23h38
  2. Interface graphique "statique" ou "objet" ?
    Par agent007se dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 22/01/2007, 01h16
  3. pb de déclaration d'objet dans vba
    Par bbgprog dans le forum Access
    Réponses: 10
    Dernier message: 01/08/2006, 14h03
  4. interface : multi surface et objet
    Par DEVfan dans le forum SDL
    Réponses: 1
    Dernier message: 31/07/2006, 22h33
  5. [Convention]déclarations des objets
    Par allstar dans le forum Langage
    Réponses: 4
    Dernier message: 17/11/2005, 00h57

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