2011-02-09 14 views
21

Lo que estoy usando:PRISM + MEF + MVVM: ¿No estás seguro de dónde empezar realmente?

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

Lo que estoy tratando de averiguar es cómo empezar con Prisma + 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 hace 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!

+0

¿Alguna vez encontró un ejemplo de MEF + Prism + MVVM? No puedo encontrar ninguno y un ejemplo vale mil enlaces de archivos de ayuda. – JohnC

+0

@JohnC: Bueno, la Guía del desarrollador de Prism fue útil, pero no, no encontré ningún ejemplo concreto de Prism + MEF + MVVM. Sin embargo, al observar cada componente individualmente, las cosas tienen más sentido. Prism es un marco que ofrece utilidades y clases que lo ayudan a escribir una aplicación MVVM. MEF es un marco de plug-in. La razón por la cual Prism y MEF pueden entrelazarse es porque Prism es extensible. No he descubierto cómo manejar Regions (usando MEF), pero descubrí que el AggregateCatalog es el corazón y el alma de Prism + MEF. – michael

+0

@JohnC: MVVM es un estilo de diseño, y naturalmente va con Prism. El caso es que Prism ofrece bastantes herramientas para ayudar a manejar situaciones especiales de MVVM (por ejemplo, proporciona DelagateCommand y tiene ejemplos sobre cómo crear un CompositeCommand). Ofrece Regions (que aún no he descifrado por completo). Ofrece clases como NotificationObject, etc. Encontré formas de usar MEF para importar mi ViewModel en mi vista y exportar mi View a mi Bootstrapper. Existen bastantes fuentes, simplemente no un GRAN ejemplo, sino muchos pequeños ejemplos que recompuse. – michael

Respuesta

1

Nunca he usado 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, cree 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).

A continuación, cree un ModuleCatalog para especificar los detalles del módulo que ha creado:

<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> 

El InitializationMode es lo que desea establecer si necesita carga en tiempo de ejecución. El catálogo se puede cargar en el programa previo Prim:

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

Entonces todo lo que necesita hacer para cargar el módulo, es obtener una referencia a IModuleManager y cargar el módulo (inyección de dependencias, yay!):

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.

1

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

Consulte la carpeta StockTrader RI, que es described here.

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

Edit: 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.

Cuestiones relacionadas