2009-08-24 21 views

Respuesta

8

Editar: No lea esta respuesta. Es vergonzosamente incorrecto. Soy un fracaso Lea a continuación Glenn Block.

No es obvio, pero esta es la misma pregunta: Managed Extensibility Framework (MEF) vs. Composite UI Application Block (CAB)

Consenso en el post duplicado es que el MEF y Prisma proporcionan el mismo conjunto básico de funcionalidades de diferentes maneras, excepto que Prism proporciona la Event Aggregator, que es un medio de comunicación pub-sub entre los componentes de la aplicación. Sin embargo, puedes usar esto con MEF. Depende mucho de la preferencia, de verdad.

+5

Ugh ... Sé que fue hace un año y he aprendido mucho, pero esta respuesta es realmente incorrecta. La publicación de Glenn Block es más precisa.Puedes ver esto más prominente en el hecho de que Prism V4 tiene una opción para * usar * MEF para varias formas de IoC y composición. No puedo eliminar ni rechazar mi propia publicación. –

+6

Es extraño leer algo y decir "¿quién es este imbécil? ... oh" –

+3

+1 por pura honestidad. Aunque su respuesta no es la "más correcta", da una idea en contraste con la respuesta de Glenn. Las líneas de responsabilidad/funcionalidad entre MEF/Prism/Unity/MAF son bastante borrosas (y tampoco se merece un voto negativo). – Doug

36

Hoy diría que Prism y MEF se complementan entre sí. Justo como Prisma y Unidad. Prism presenta un conjunto de servicios específicos como RegionManager, DelegateCommand y EventAggregator, que ayudan a crear aplicaciones compuestas. MEF por otro lado es un mecanismo de composición más general para la extensibilidad de aplicaciones y marcos, ya sean compuestos o no. El factor clave sobre el MEF es su descubrimiento, lo que significa que puede salir y descubrir dinámicamente todas las partes disponibles.

Puede que esté interesado en consultar el proyecto de contribución de MEF (mefcontrib.codeplex.com) que contiene una capa de integración para Unity y MEF. Con esa extensión, Unity maneja MEF detrás de las escenas, por lo que no estás contendiendo con dos contianers. La ventaja es que le permite usar Unity para Pocos en general y MEF para descubrir extensiones. Por lo tanto, como Prism se basa actualmente en Unity, puede usarlo para aprovechar MEF. Para usar el proyecto contrib, tendrás que hacer algunos pequeños cambios en tu Unity Bootstrapper, pero debería ser bastante trivial.

Definitivamente hay cierta superposición. El lugar donde es más prominente es con respecto a los módulos. Prism usa un IModule como medio de descubrimiento. En MEF, cualquier componente puede ser una parte y se puede descubrir dinámicamente. Esto significa que con MEF tiene modularidad de arriba a abajo, mientras que con Prism, los módulos son unidades más granulares. Las aplicaciones compuestas son definitivamente un área con la que nos encontramos en el momento de MEF. Con el tiempo, es muy probable que veas más y más soporte para construir esos tipos de aplicaciones dentro de MEF. Estamos trabajando con p & p para garantizar que, cuando eso suceda, haya una transición sin problemas.

+0

Tenga en cuenta, sin embargo, que [el soporte de MEF en Prism está llegando a su fin] (https://github.com/PrismLibrary/Prism): "MEF es compatible con WPF por su compatibilidad con versiones anteriores. No se agregará a Windows 10 UWP o Xamarin Forms ". – Informagic

0

MEF nunca podrán reemplazar prisma

MEF es un manager.its de inyección de dependencia no un contenedor de inyección de dependencias.
MEF proporciona la capacidad de asignar exportaciones e importaciones de forma elitlar usando atributos.

Prism with MEF le brinda la capacidad de descubrir auto dlls y la capacidad de agregar y eliminar complementos agregando o eliminando dlls. Donde como marco de prisma se proporciona el agregador de eventos, el administrador de regiones, el localizador de servicios.

Puede usar prismas sin MEF. Hay varias otras opciones como ninject, unity y otros contenedores DI.

Puede usar MEF con prisma para compilar aplicaciones extensibles basadas en complementos.

Cuestiones relacionadas