wpf - Prisma v4: ¿Unidad o MEF?
mvvm unity-container (4)
He usado Unity durante más de un año con PRISM, pero he notado algunos problemas graves de pérdida de memoria. Por lo tanto, decidí dar PRISM 4 y MEF. Lo que hice fue convertir mi aplicación para usar PRISM 4 con Unity. Luego convertí una rama para usar MEF. Puede sonar divertido, pero MEF parece manejar el consumo de memoria y liberar algo mejor que Unity.
¿Sería bueno escuchar si otros han hecho la misma experiencia?
Descargué Prism v4 y ejecuté el instalador. Entré en el directorio y ejecuté los dos siguientes archivos por lotes:
- Solo escritorio - Modularidad abierta con Mef QuickStart.bat
- Solo escritorio - Modularidad abierta con Unity QuickStart.bat
Cuando compilo estas aplicaciones, no veo ninguna diferencia real. He buscado MEF versus Unity y he encontrado algunos pros / contras, pero nada que indique específicamente si uno es "mejor" (y sé que es subjetivo) con el uso en Prism. Supongo que quizás, si incluyo mis requisitos, alguien pueda indicarme las tecnologías correctas para usar (incluso si no es Prism 4).
- La aplicación debe escribirse en WPF ( NO Silverlight).
- La aplicación principal será extremadamente delgada.
- La aplicación principal usará un servicio web para construir el menú de las "aplicaciones / módulos" a los que tiene acceso una persona.
- Las "aplicaciones / módulos" estarán completamente contenidas en otras bibliotecas administradas.
- La aplicación principal obtiene vistas y modelos de vista al reflejar en estos archivos DLL.
- La aplicación principal debería alimentar los servicios de registro, etc. en estas "aplicaciones / módulos".
Por ejemplo:
Un usuario básico podría tener las siguientes opciones:
- Registro de dirección de ViewOnly
Todos los artículos relacionados con la dirección están dentro de Address.dll.
Un usuario avanzado podría tener las siguientes opciones:
- Nuevo registro de dirección
- Registro de dirección abierta (actualizar / eliminar)
- Administrar usuarios
Todos los artículos relacionados con la dirección están dentro de Address.dll.
Todos los elementos relacionados con Administrar están dentro de Admin.dll.
La aplicación no debe hacer referencia a ninguna de estas DLL, planeo reflejarlas, de modo que si hay 100 módulos diferentes y un usuario solo tiene acceso a 2 de ellos, solo se descargan y utilizan 2 de ellos. Mientras que un usuario que tiene acceso a 10 de ellos obtiene esos 10.
Ya he resuelto la descarga DLL a través de WebService. :)
Ninguno es "mejor": son cosas diferentes.
La OMI que elijas debe ser impulsada solo por tus requisitos. En función de los requisitos que ha publicado aquí, le sugiero que utilice MEF, ya que tiene módulos contenidos en DLL y la aplicación principal no tiene conocimiento de los módulos que debe cargar. Esas tareas son la razón por la que MEF existe.
De todos modos, podría usarlos a ambos: MEF para la modularidad y Unity para aprovechar las ventajas de la inyección de dependencia (capacidad de prueba, reutilización, ...)
Respecto a su pregunta sobre si MEF y UNITY pueden funcionar bien entre ellos, les puedo decir que están trabajando muy bien entre ellos. Desarrollé una aplicación de prueba de concepto que utilizaba PRISM, Unity y MEF.
Si todos los módulos no se vuelven a compilar al mismo tiempo que la aplicación, MEF le brinda muchas formas de lidiar con las interfaces cambiantes en la aplicación principal. De lo contrario, MEF puede ser más complejo de lo que necesita.