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 :

"Managed Extensibility Framework", CompositionContainer.ComposeParts() n'existe pas.


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    olf
    olf est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 26
    Par défaut "Managed Extensibility Framework", CompositionContainer.ComposeParts() n'existe pas.
    Bonjour à tous,

    J'ai essayé de tester MEF sur une ancienne version de visual studio en partant de la librairie disponible sur le site http://mef.codeplex.com/. et en reproduisant l'exemple donné dans le tutoriel de cette technologie.

    Toutefois, ce code ne peut pas marcher dans mon cas car la classe System.ComponentModel.Composition.Hosting.CompositionContainer ne possède pas de méthode ComposeParts.

    (la seule méthode ComposeParts que j'ai trouvé appartient à la classe System.ComponentModel.Composition.AttributedModelServices)

    À votre avis, l'origine de ce problème est-il :

    - qu'il faut utiliser une version (plus) récente de visual studio pour que MEF soit utilisable (si oui, quel est le minimum requis) ?

    - que le code que j'ai téléchargé (MEF Preview 9 du 16 février 2010) n'est pas "raccord" avec la documentation à laquelle je me réfère ?

    - que j'ai fait une erreur autre part ?

    En vous remerciant d'avance de votre contribution,

    Florian.

  2. #2
    olf
    olf est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 26
    Par défaut
    Je suis parti sur une autre piste qui semble fonctionner :

    Au lieu de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [Import]
        public IMessageSender MessageSender { get; set; }
     
    ...
    AssemblyCatalog catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
    var container = new CompositionContainer(catalog);
    container.ComposeParts(this);
    j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
     
      public IMessageSender MessageSender 
     
    ...
     
     
    AssemblyCatalog catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
    var container = new CompositionContainer(catalog);
     
     
    MessageSender = container.GetExportedValueOrDefault<IMessageSender>();

  3. #3
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 24
    Par défaut
    Salut.
    ComposeParts est une méthode d'extension. Elle est définie dans la classe System.ComponentModel.Composition.AttributedModelServices mais elle s'applique bien à la classe CompositionContainer.
    Pour y accéder faut juste que tu rajoutes cette clause avec les autres using :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    using System.ComponentModel.Composition;

  4. #4
    olf
    olf est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 26
    Par défaut
    Bonjour

    La clause
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using System.ComponentModel.Composition;
    est incluse dans l'exemple du tutorial que j'ai essayé de reproduire.

    Ce n'est donc pas à cause de son absence que cela ne marche pas.

    Néanmoins, il était pertinent de relever le fait qu'il s'agit d'une méthode d'extension.

    Suite à une recherche rapide sur internet, je vois que les méthodes d'extension ont été introduites au niveau du framework 3.5.

    L'origine du problème est donc qu'il faut utiliser une version plus récente de Visual Studio.

    Cordialement,

    Florian.

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

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