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 avec Unity et Client WCF


Sujet :

C#

  1. #1
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut Injection de dépendance avec Unity et Client WCF
    Bonjour,

    J'ai un peu de mal à comprendre le principe d'injection de dépendance ainsi que son implémentation via Unity.

    Si je comprends bien, le principal intérêt est de de pouvoir découpler les différentes couches et ainsi notamment faciliter les Tests unitaires.

    Dans un projet que je dois réaliser (je n'ai pas les sources), on me demande d'utiliser l'IoC avec Unity pour faire les appels des services WCF.

    L'appel se fait via une méthode où on passe en paramètre l'interface de la méthode qu'on veut appeler ainsi que le type du retour.

    C'est qq chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    IServiceInvoker _invoker;
     
    _invoker.Invoke(IClass, ObjectReturn).CallMethod() ;
    J'aimerais pouvoir utiliser l'injection de dépendance pour ne pas dépendre de l'appel au webservice et ainsi faire les TU. et aussi pouvoir mocker la réponse...

    Donc j'ai fait qq chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    IUnityContainer _unityContainer = new UnityContainer();     
     
     _unityContainer.RegisterType<IServiceInvoker , ServiceInvoker>();
     
    IServiceInvoker invoke = _unityContainer.Resolve<IServiceInvoker>();
    invoke.CallMethod() ...
    Sauf erreur de ma part, si j'utilise cette maniere, je n'ai pas besoin de déclarer quoique ce soit dans le fichier de config... J'avais déjà essayé de rajouter les blocs dans le fichier de config aussi sans succès

    Pourtant, lorsque j'exécute le resolve, j'ai l'exception suivante

    The current type, IServiceInvoker, is an interface and cannot be constructed. Are you missing a type mapping?
    Une idée?
    Est-ce bien comme cela qu'il faut mettre en pratique l'injection de dépendance?

  2. #2
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Bonjour!

    Le probleme que j avais est resolu... probleme de constructeur par defaut qui n existait pas et il fallait du coup rajouter des parametres.

    Par contre toujours un peu de mal a voir le vrai interet ... cela signifie qu avec un mock, je peux simuler le webservice maintenant?

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par trihanhcie Voir le message
    Par contre toujours un peu de mal a voir le vrai interet ... cela signifie qu avec un mock, je peux simuler le webservice maintenant?
    Oui

    Si tu dois tester une partie du code qui utilise le service, tu peux remplacer le vrai service par un mock pour avoir des cas de tests que tu contrôles entièrement

  4. #4
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Je remonte un peu le sujet...

    Donc si je comprends bien, il y a 2 manieres d injecter.

    1) on le fait via une propriete
    2) on cree un constructeur avec parametres

    Vu que je me greffe a un projet existant, ca me parait compliquer de rajouter un constructeur avec parametre uniquement du coup je l ai fait avec une propriete.

    Lors de mes tests unitaires, ca a l air de fonctionner mm si je n ai pas de reponses en sortie.

    Si on est en dehors des TU, comment faire "proprement" pour initialiser la propriete ?
    Doit on faire qq chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(property == null) property = new Property();
    En effet, je n utilise pas le conteneur si je ne suis pas ds les TU du coup bah cette propriete n est pas initialisee...

    Je dois encore avoir des pieces du puzzle qui manque pour bien comprendre

Discussions similaires

  1. Réponses: 14
    Dernier message: 09/09/2011, 19h15
  2. Injection de dépendance avec MVVM => Boucle infinie
    Par Stunt_las dans le forum Silverlight
    Réponses: 21
    Dernier message: 02/11/2009, 14h48

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