J'apprends le prisme V4 en utilisant MEF pour charger mes modules. Le chargement des modules fonctionne, mais dans un module, je veux charger un View/ViewModel (MVVM) et je ne sais pas vraiment comment obtenir MEF pour résoudre tout ça pour moi. Premièrement, comment dois-je marquer le ViewModel (je suis l'exemple de StockTraderRI) pour qu'il ne soit pas chargé au démarrage mais puisse être chargé au cours de l'exécution dans une région? Deuxièmement: comment charger le ViewModel en utilisant MEF afin qu'il se connecte aux interfaces correspondantes? MEF le fait très bien pour les choses au démarrage qui sont marquées comme [Export], mais je ne savais pas comment y parvenir pendant l'exécution.Envelopper mon esprit autour de MEF: comment charger View (Model)?
Répondre
Vous pouvez utiliser ce que l'on appelle un Lazy Export afin que l'interface ne soit pas résolue tant que vous ne l'utilisez pas explicitement.
Si vous devez créer plusieurs instances, MEF ne le supporte pas particulièrement bien. Vous pouvez faire votre propre découverte et instanciation, ou vous pouvez définir l'exportation comme ceci:
[PartCreationPolicy(CreationPolicy.NonShared)]
[Export(typeof(ISomething)]
public class Something : ISomething { }
L'inconvénient est que maintenant où vous devez créer l'instance, vous devez avoir une référence à l'instance de conteneur réelle . Ensuite, vous pouvez faire:
var something = _container.GetExportedObject<ISomething>();
EDIT: D'accord, je pense que je comprends mieux ce que vous êtes après. Voici comment je suis généralement résolu ce problème:
je mets en œuvre mon point de vue des objets comme des instances UserControl et ne fixe pas DataContext partout dans leur code ou XAML.
Je crée un DataTemplate qui se lie du type du ViewModel au UserControl. Sur mon MainViewModel (ou tout ce qui correspond à la vue qui héberge les régions), j'expose un objet RegionX général (éventuellement tapé sur une interface si tous mes ViewModels partagent certaines fonctionnalités communes, mais Object fonctionne bien).
Je crée un ContentPresenter avec du contenu lié à la propriété RegionX. Maintenant, mon modèle MainViewModel peut importer différentes instances de ViewModel correspondant aux types de ViewModels qui pourraient être hébergés par le RegionX. Quand je veux changer la vue 'active' dans la région, je place simplement RegionX dans le ViewModel correspondant.
- 1. MVP (Model View Presenter) ou MVC (Model View Controller)
- 2. MVVM View Model DTO
- 3. Model View Controller
- 4. envoyer un paramètre de view-model au constructeur d'un autre view-model
- 5. Envelopper ma tête autour OCaml
- 6. Vb.net Model View Control
- 7. (Model/View/Controller) MVC
- 8. Model View Controller
- 9. iPhone: Envelopper du texte autour de l'image
- 10. Où dois-je utiliser mon objet view-model?
- 11. Model View ViewModel les meilleures pratiques
- 12. Boîtes de dialogue Model-View-Presenter et Modal .... Comment?
- 13. Commande de ForEach sur View Model
- 14. Comment obtenir une référence de conteneur enfant dans View Model
- 15. Problème envelopper ma tête autour de cette imbriquée question Départements
- 16. nokogiri: comment envelopper les balises html autour d'éléments xpath donnés?
- 17. comment envelopper une étiquette html autour d'une étiquette d'image?
- 18. Model-View-Presenter: Valider l'interface utilisateur
- 19. Model View ViewModel dans WPF avec WebBrowser
- 20. TreeView Sync à SelectedItem dans View Model
- 21. MVC Model View pour objet complexe
- 22. Aller à Model/View/Controller dans emacs
- 23. Liaison de données avec WPF et MVVM/Model-View-ViewModel
- 24. Comment structurer un programme C# WinForms Model-View-Presenter (Passive View)?
- 25. Comment utiliser le framework Qt Model/View avec la structure Graphics View
- 26. Table View - Afficher comme - # Autour de moi - Google # - dans iPhone
- 27. esprit d'un test JUnit
- 28. Application de contrôleur ASP.NET Model View sur DreamHost PS
- 29. Flex 4 - Envelopper du texte autour d'une image
- 30. Model View Presenter plus Service Web ASP.NET; où vit l'asmx?
je cherchais quelque chose de plus comme MefMagic.Create qui créeraient la MyView nécessaire? –
Sam
Cherchez-vous à créer plusieurs instances du même type? –
Non (du moins pas encore). Le View/ViewModel doit être créé et soudé ensemble. – Sam