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 :

Injection de dépendance et librairie dynamique (dll ou so)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Dev
    Inscrit en
    Mai 2009
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Mai 2009
    Messages : 257
    Par défaut Injection de dépendance et librairie dynamique (dll ou so)
    Généralement, on utilise une librairie dynamique en "sens unique", le code principal charge la librairie et appelle les fonctions paramétrées dont il a besoin

    Mettons que l'on veuille injecter une dépendance dans cette lib (une classe du code principal par exemple), et donc inverser le contrôle, comment faut il s'y prendre ?

  2. #2
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    Je ne pense pas que ce soit possible. Voir même pas du tout. En fait ça pue limite le hack ton truc.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Je ne saisis pas le problème. Rien ne t'empêche de donner le contrôle à ta bibliothèque. Celle-ci contient une fonction/classe d'entrée (qui prend le contrôle) et ensuite à coup de DP prototype/fabrique tu implémentes ton IoC.

    Code dll : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class dependency
    {
    public:
       virtual ~dependency()=0;
    };
    class application
    {
    public:
        application(dependency &); // demarrage
     
    };

    Code exe : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class my_dependency : public dependency
    {
    public:
        virtual ~my_dependency();
    };
     
    int main()
    {
       my_dependency dep;
       application app(dep); // à partir de là, ta DLL prend le contrôle
       return 0;
    }

  4. #4
    Membre très actif
    Profil pro
    Dev
    Inscrit en
    Mai 2009
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Mai 2009
    Messages : 257
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Salut,
    Je ne saisis pas le problème. Rien ne t'empêche de donner le contrôle à ta bibliothèque. Celle-ci contient une fonction/classe d'entrée (qui prend le contrôle) et ensuite à coup de DP prototype/fabrique tu implémentes ton IoC.

    Code dll : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class dependency
    {
    public:
       virtual ~dependency()=0;
    };
    class application
    {
    public:
        application(dependency &); // demarrage
     
    };

    Code exe : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class my_dependency : public dependency
    {
    public:
        virtual ~my_dependency();
    };
     
    int main()
    {
       my_dependency dep;
       application app(dep); // à partir de là, ta DLL prend le contrôle
       return 0;
    }
    Ok, jusque là pas de problème

    maintenant mettons que dependency a besoin de plusieurs fichiers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include file1.hpp
    #include file2.hpp
    #include file3.hpp
     
    class dependency
    {
    public:
       virtual ~dependency()=0;
    };
    et que chacun de ces fichiers a besoin d'autres fichiers, etc
    au final on se retrouve avec une bonne portion de fichiers du code appellant à inclure dans la librairie
    J'aimerais savoir comment éviter ça

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Déclaration anticipée ?
    De toute façon si dependency dépend d'autres classes, alors ces classes doivent être des interfaces abstraites dont l'instance concrète est injectée à la construction. Peux tu préciser plus en détail ton exemple car sinon j'ai peur de ne pas forcément tout saisir.

  6. #6
    Membre très actif
    Profil pro
    Dev
    Inscrit en
    Mai 2009
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Mai 2009
    Messages : 257
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Salut,
    Déclaration anticipée ?
    De toute façon si dependency dépend d'autres classes, alors ces classes doivent être des interfaces abstraites dont l'instance concrète est injectée à la construction. Peux tu préciser plus en détail ton exemple car sinon j'ai peur de ne pas forcément tout saisir.
    ce qui me gêne c'est que dependency.hpp doive inclure d'autres fichiers .hpp, ce qui fait que l'on déporte une bonne partie du code appelant vers la librairie.
    Code inutile pour celle-ci mais indispensable pour pour pouvoir injecter dependency
    Je voulais savoir s'il y avait moyen de contourner cette injection de fichiers non nécessaires à la librairie

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/07/2011, 14h35
  2. Injection de dépendance, AOP dynamique
    Par davcha dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 24/06/2010, 20h08
  3. Réponses: 7
    Dernier message: 24/11/2008, 12h49
  4. Librairie dynamique (DLL) en Borland
    Par ywan42 dans le forum Windows
    Réponses: 3
    Dernier message: 18/03/2007, 18h19
  5. Recompiler une librairie dynamique (DLL) en statique
    Par shenron666 dans le forum C++
    Réponses: 9
    Dernier message: 07/04/2005, 19h28

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