PRISM + MEF + MVVM - vous ne savez pas par où commencer?

Ce que j'utilise:

  • Visual Studio 2010
  • Microsoft. NET Framework 4
  • Prism v4

ce que j'essaie de comprendre c'est comment commencer avec Prism + MEF tout en maintenant le modèle MVVM. Quand je vais dans le Prism Quickstarts, il a un Prism + MEF, mais les commentaires dans le projet indiquent spécifiquement que L'exemple Quickstart ne met pas en œuvre MVVM. Je ne suis pas vraiment sûr de ce qu'il faut mélanger / assortir pour que ma coquille elle-même suit MVVM (et régions).

fondamentalement, je veux utiliser MEF pour pouvoir charger des assemblages (Modules) à l'exécution. Et, je veux configurer les régions dans mon Shell et avoir le Shell utiliser MVVM (pour que je puisse databind les choses au shell). Chaque exemple est soit Prisme, le Prisme + MVVM, Prisme + Unité, Silverlight exemples, Prisme + MEF, etc. Mais je ne peux trouver aucun prisme WPF + MEF + MVVM des exemples ou des informations. Je n'ai vraiment aucune idée de comment configurer mon amorçage pour obtenir aller.

une fois que cette partie est terminée, je suis sûr que je vais trouver comment charger d'autres contrôles en utilisant MVVM dans mon shell. N'importe quelle aide serait grande, particulièrement les ressources qui traitent directement de cette situation comme appliquée à quelque chose de similaire (c.-à-d. Prism + unité et sans MEF). Merci!

21
demandé sur michael 2011-02-09 19:39:23

2 réponses

Je n'ai jamais utilisé Prism+MEF moi-même, mais dans votre question vous mentionnez que vous voulez être capable de charger des modules à l'exécution (avec MEF). C'est quelque chose que vous n'avez pas besoin D'avoir MEF pour, Parce que Prism est assez bon pour le faire lui-même. La configuration est assez simple:

tout d'abord, créez un module Prism en implémentant Modularity.IModule. Il ne nécessite qu'une seule méthode: Initialize(). Ici vous pouvez faire n'importe quelle configuration nécessaire pour votre module. En général, j'étends aussi le constructeur pour injecter d'autres interfaces. peut être nécessaire (en utilisant L'Unité).

ensuite, créez un ModuleCatalog pour spécifier les détails du module que vous avez créé:

<Modularity:ModuleCatalog 
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           xmlns:Modularity="clr-namespace:Microsoft.Practices.Prism.Modularity;assembly=Microsoft.Practices.Prism.Composition">
    <Modularity:ModuleInfo Ref="Your.ModuleProject.dll" 
        ModuleType="Your.ModuleProject.Module, Your.ModuleProject" 
        ModuleName="Module1" 
        InitializationMode="OnDemand" />
</Modularity>

InitializationMode est ce que vous voulez définir si vous avez besoin de charger runtime. Le catalogue peut être chargé dans le Bootstrap Prim:

catalog = Microsoft.Practices.Prism.Modularity.ModuleCatalog.CreateFromXaml(new Uri("Modules.xaml", UriKind.RelativeOrAbsolute));

Puis tout ce que vous devez faire pour charger votre module, est d'obtenir une référence à IModuleManager (injection de dépendance, yay!) et de charger le module:

if (loadModule1)
    var myModule = moduleManager.LoadModule("Module1");

maintenant le module est connu de Prism. Gardez à l' pensez que le déchargement n'est pas supporté par Prism.

1
répondu RoelF 2015-04-13 07:28:54

Tout ce que vous avez demandé semble être présent sur les échantillons fournis installé avec Prism, vous avez juste regardé le mal.

découvrez le StockTrader RI dossier, qui est décrit ici.

il a un échantillon assez complet pour des applications réelles, avec quelques scénarios complexes et est mis en œuvre avec Prism (évidemment), MVVM et MEF.

Edit: même si le lien que j'ai fourni est pour Prism 5, Le l'échantillon était également présent sur le Prisme 4.1. Dans cette version, la documentation n'était pas disponible en ligne (du moins autant que je me souvienne) , mais a été plutôt offert sur un .fichier chm installé avec le code source Prism + échantillons. Je ne sais pas pour v4.0, cependant.

1
répondu Gabriel Rainha 2015-05-18 23:06:55