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

Silverlight Discussion :

MEF Imports et Exports


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 133
    Par défaut MEF Imports et Exports
    Bonjour à tous

    Je débute sur MEF, et je me trouve confronté à un soucis :

    J'ai un xap externe, qui exporte un UserControl, et donc le constructeur prend un paramètre importé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [Export(typeof(UserControl))]
        public partial class StandardControl : UserControl
        {
            [ImportingConstructor]
            public StandardControl([Import("type", typeof(string))] string type)
            {
                InitializeComponent();
                ...
            }
          ...
          }

    Dans mon projet principal, je voudrais pouvoir importer ce UserControl, tout en Exportant une chaine de caractère vers le constructeur du xap externe.
    Dans mon code, je récupère des UserControl avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public partial class MainPage : UserControl, IPartImportsSatisfiedNotification
        {
            [ImportMany(AllowRecomposition = true)]
            public Lazy<UserControl>[] Widgets { get; set; }
     
            public MainPage()
            {
                InitializeComponent();
                CompositionInitializer.SatisfyImports(this);     
            ...
             }
         ...
        }

    Si j'essaye d'exporter ma chaine de caractère dans la MainPage qui réalise la composition, une exception me dit que c'est impossible -> je ne peux appeler SatisfyImports et faire un export en même temps.

    Comment dois-je procéder ? Quelle est la best-practice ?

    PS : je n'utilise pas MVVM sur ce projet.

  2. #2
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Tu te compliques la vie en utilisant un constructeur avec parametre pour ton usercontrol. Pourquoi ne pas utiliser une methode d'initialisation a la place ?

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 133
    Par défaut
    Salut !
    Merci de ta réponse !

    Qu'entends-tu par méthode d'initialisation ? Pourrais-tu m'en dire plus ?

  4. #4
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Au lieu d'exporter un UserControl, il est plus intéressant de soumettre une interface ( via une dll commune) :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public interface IPluginControl
    {
         void InitializeControl( object Value );
    }

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    [Export(typeof(IPluginControl))]
        public partial class StandardControl : UserControl, IPluginControl
        {
              public void InitializeControl( object Value )
              {
                   // initialise ton control ici
              }
        }

    du coté MEF, selon le cas tu peux caster en UserControl ou en IPluginControl si tu veux initialiser ton control.

    L'idéal est souvent d'utiliser des interfaces, plutot que des classes. Le mieux ici, serait que le UserControl soit inclu dans une propriété de IPluginControl. A toi de voir

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 133
    Par défaut
    Super, c'est effectivement une meilleure solution, et le problème est résolu, merci

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

Discussions similaires

  1. [10] Import et Export
    Par m.skiti dans le forum Oracle
    Réponses: 3
    Dernier message: 16/08/2006, 17h51
  2. APi pour import et export XMI
    Par darkmoon25 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 31/05/2006, 15h52
  3. importation et exportation d'un base Mysql
    Par zidenne dans le forum Administration
    Réponses: 17
    Dernier message: 24/05/2006, 21h17
  4. comment importer ou exporter des BDD afin de les reutiliser!?
    Par saada1978 dans le forum Bases de données
    Réponses: 4
    Dernier message: 11/05/2006, 18h36
  5. importer et exporter des données
    Par denza1 dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/12/2004, 17h34

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