Managed Extensibility Framework ( MEF ) es un componente de .NET Framework 4.0 que tiene como objetivo crear aplicaciones ligeras y extensibles. Su objetivo es permitir que los desarrolladores de aplicaciones .NET descubran y utilicen extensiones sin necesidad de configuración. También tiene como objetivo permitir que los desarrolladores de extensiones encapsulen el código fácilmente y eviten dependencias frágiles. Además, tiene como objetivo permitir que las extensiones se reutilicen en todas las aplicaciones. MEF se introdujo como parte de .NET 4.0 y Silverlight 4 .
Desarrollador (es) | Microsoft |
---|---|
Lanzamiento estable | V1 en .NET Framework 4.0 / 12 de abril de 2010 |
Versión de vista previa | V2 Preview 5/19 de diciembre de 2011 |
Repositorio | github |
Escrito en | Idiomas .NET |
Sistema operativo | Ventanas |
Plataforma | .NET Framework |
Tipo | Marco de aplicación web |
Licencia | Licencia MIT [1] |
Sitio web | docs |
Descripción general
MEF tiene como objetivo resolver el problema de extensibilidad del tiempo de ejecución. Sin MEF, cualquier aplicación que quiera admitir un modelo de complemento necesita crear su propia infraestructura desde cero. A menudo, esos complementos serán específicos de la aplicación y no se pueden reutilizar en varias implementaciones.
- MEF tiene como objetivo proporcionar una forma estándar para que la aplicación host se exponga y consuma extensiones externas. Las extensiones, por su naturaleza, podrían reutilizarse entre diferentes aplicaciones. Sin embargo, una extensión aún se puede implementar de una manera que sea específica de la aplicación. Las extensiones en sí mismas pueden depender unas de otras y MEF tiene como objetivo asegurarse de que estén conectadas en el orden correcto, evitando que el desarrollador lo haga manualmente.
- MEF ofrece un conjunto de enfoques de descubrimiento para que la aplicación localice y cargue las extensiones disponibles.
- MEF permite etiquetar extensiones con metadatos adicionales cuyo objetivo es facilitar la consulta y el filtrado enriquecidos.
Diseño
A grandes rasgos, el núcleo de MEF consiste en un catálogo y un CompositionContainer. Un catálogo es responsable de descubrir extensiones y el contenedor coordina la creación y satisface las dependencias.
- El ciudadano de primera clase de MEF es la clase ComposablePart. Una parte componible ofrece una o más Exportaciones, y también puede depender de una o más Importaciones o servicios proporcionados externamente. Una parte componible también administra una instancia, que puede ser una instancia de objeto de un tipo dado (está en la implementación predeterminada de MEF) [ aclaración necesaria ] . Sin embargo, MEF es extensible y se pueden proporcionar implementaciones adicionales de ComposablePart siempre que se adhieran a los contratos de Importación / Exportación.
- Las exportaciones y las importaciones tienen un contrato cada una. Los contratos son el puente entre exportaciones e importaciones. Un contrato de exportación puede constar de más metadatos que se pueden utilizar para filtrar su descubrimiento. Por ejemplo, podría indicar una capacidad específica que ofrece la exportación.
- El contenedor de MEF interactúa con los catálogos para tener acceso a las partes componibles. El propio contenedor resuelve las dependencias de una pieza y expone las exportaciones al mundo exterior. Se pueden agregar instancias de partes compostables directamente al contenedor.
- Un ComposablePart devuelto por un catálogo probablemente será una extensión de la aplicación. Es posible que tenga importaciones (dependencias) de los componentes que ofrece la aplicación host y es probable que exporte otros.
- La implementación de parte componible MEF predeterminada utiliza metadatos basados en atributos para declarar exportaciones e importaciones. Esto le permite a MEF determinar qué partes, importaciones y exportaciones están disponibles a través del descubrimiento.