wpf mvvm module mef prism-4

wpf - PRISM+MEF+MVVM: ¿No estoy seguro de dónde empezar realmente?



module prism-4 (2)

Lo que estoy usando:

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

Lo que estoy tratando de averiguar es cómo comenzar con Prism + MEF mientras se mantiene el patrón MVVM. Cuando entro en Prism Quickstarts, tiene un Prism + MEF, pero los comentarios en el proyecto especifican que el ejemplo de Quickstart no implementa MVVM. No estoy seguro de qué mezclar / combinar para que mi caparazón siga MVVM (y regiones).

Básicamente, quiero usar MEF para poder cargar ensamblajes (módulos) en tiempo de ejecución. Y, quiero configurar regiones en mi Shell y hacer que Shell use MVVM (para poder enlazar datos con el shell). Cada ejemplo en línea es Prisma, Prisma + MVVM, Prisma + Unidad, ejemplos de Silverlight, Prisma + MEF, etc. Pero no puedo encontrar ningún ejemplo o información de WPF Prism + MEF + MVVM. Realmente no tengo idea de cómo configurar mi bootstrapping y demás para ponerme en marcha.

Una vez que se haya hecho esa parte, estoy seguro de que averiguaré cómo cargar otros controles usando MVVM en mi caparazón. Cualquier ayuda sería excelente, especialmente los recursos que se relacionan directamente con esta situación como apuestos a algo similar (es decir, Prism + Unity y sin MEF). ¡Gracias!


Nunca utilicé Prism + MEF, pero en su pregunta menciona que desea cargar módulos en tiempo de ejecución (con MEF). Esto es algo para lo que no necesitas tener MEF, porque Prism es bastante bueno para hacerlo por sí mismo. La configuración es bastante simple:

Primero, crea un módulo Prism implementando Modularity.IModule . Solo requiere un método: Initialize() . Aquí puede hacer cualquier configuración necesaria para su módulo. En general, también extiendo el constructor para inyectar cualquier otra interfaz que pueda necesitar (usando Unity).

Luego, cree un ModuleCatalog para especificar los detalles del módulo que creó:

<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 es lo que desea configurar si necesita cargar el tiempo de ejecución. El catálogo se puede cargar en el bootstrapper Prim:

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

Entonces, todo lo que necesita hacer para cargar su módulo es obtener una referencia a IModuleManager (Dependency Injection, ¡yay!) Y cargar el módulo:

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

Ahora el módulo es conocido por Prism. Tenga en cuenta que la descarga no es compatible con Prism.


Todo lo que ha preguntado parece estar presente en las muestras que vienen instaladas con Prism, simplemente miró las incorrectas.

Consulte la carpeta StockTrader RI , que se describe aquí .

Tiene una muestra bastante completa para aplicaciones de la vida real, con algunos escenarios complejos y se implementa con Prism (obviamente), MVVM y MEF.

Editar: Aunque el enlace que proporcioné es para Prism 5, la muestra también estuvo presente en Prism 4.1. En esa versión, la documentación no estaba disponible en línea (al menos hasta donde recuerdo), sino que se ofrecía en un archivo .chm instalado con el código fuente de Prism + muestras. No sé acerca de v4.0, sin embargo.