Corrígeme si me equivoco, pero MEF solo es bueno para administrar un conjunto de cosas desconocidas (complementos) que pueden detectarse automáticamente y conectarse automáticamente. Para un proyecto futuro necesitaremos un contenedor de IoC verdadero para configurar explícitamente las partes conocidas de la aplicación (que MEF no es bueno) pero también necesitamos admitir complementos autodetectados (preferiblemente POCO sin atributos, si eso es posible). ¿Puede un contenedor IoC admitir esto fácilmente/por defecto? Si es así, ¿puede dar una sugerencia rápida de sobre cómo se hace esto en Unity y StructureMap? Esos son los dos que actualmente preferimos. Realmente nos gustaría evitar una dependencia en un contenedor IoC y MEF.Usar el contenedor IoC para la arquitectura de complementos
Respuesta
Creo que es importante tener en cuenta que, si bien MEF no es un contenedor IoC en un sentido convencional, está realizando una inversión de control. De hecho, estoy en desacuerdo con eso y digo que MEF es un contenedor IoC muy parecido a cualquier otro. La diferencia real entre say Unity y MEF es que MEF admite de forma predeterminada la composición por encima de la resolución de tipo explícito y escribe el descubrimiento sobre la configuración. Pero, como hemos visto con el proyecto MEFContrib, es muy posible que MEF se comporte más como un contenedor IoC tradicional. MEF le proporciona una excelente base para el comportamiento de componentes modulares, eliminando gran parte del injerto duro y la forma en que está diseñado, le permite agregar más funcionalidad. Digamos, por ejemplo, que tiene su base de código existente construida alrededor de otro contenedor IoC o localizador de servicios, puede conectar un ExportProvider
para hacerlo, así que puede conectar un proveedor a un localizador de servicios como el proyecto Common Service Locator y luego conectar un compatible Implementación de CSL y tiene componentes de componentes de MEF que usan tipos derivados de su otro contenedor de IoC. MEF también realiza la inyección de dependencia para usted.
Si desea evitar tener una dependencia en un contenedor de IoC específico o MEF, siempre puede usar algo como el Localizador de servicios comunes, que es una abstracción de las operaciones comunes de contenedor. De esa manera, si necesita/desea cambiar la forma en que todo se conecta, es relativamente sencillo. Hay implementaciones de CSL compatibles para la mayoría de los contenedores de IoC y MEF.
Espero que ayude.
¿MEF Contrib permitiría que las piezas sean POCO sin atributos? – bitbonk
El modelo atribuido es solo el modelo de programación predeterminado para MEF. MEFContrib tiene un 'ConventionCatalog', que combinado con' PartRegistry' le permite registrar tipos más parecidos a contenedores como Unity/Autofac/Windsor, etc. –
- 1. Especifique el constructor para el contenedor Unity IoC para usar
- 2. Cuándo usar un contenedor de IOC?
- 3. IoC, ¿dónde colocas el contenedor?
- 4. Contenedor IoC para bibliotecas de clases portátiles
- 5. Contenedor IoC Project-Embedded
- 6. Eliminar dependencia en el Contenedor de IoC
- 7. ¿Puede Windsor cooperar con otro contenedor IoC?
- 8. ¿Debo encapsular mi contenedor IoC?
- 9. El mejor contenedor IOC para dispositivos Android/móviles
- 10. Arquitectura SOA con WCF + IOC Structuremap
- 11. ¿Qué forma preferida de cablear dependencias usando el contenedor IoC?
- 12. Constructor por defecto versus contenedor IOC
- 13. .NET Contenedor de IoC para medianas ASP.NET MVC
- 14. Arquitectura de complementos en C usando libdl
- 15. Contenedor IoC: ¿singleton o instancia pasada?
- 16. ¿Un contenedor de IoC reemplaza el uso de las fábricas
- 17. Combinación del contenedor MEF y IoC
- 18. ¿Cuáles son los pros y los contras para usar un contenedor de IOC?
- 19. Cómo evitar el acoplamiento con un contenedor de IoC
- 20. Ligera contenedor IoC que trabaja en Unity3D
- 21. ¿Cuándo es apropiado usar IoC?
- 22. Contenedor IoC/DI compatible con Compact Framework
- 23. ¿Para qué puedo usar la arquitectura HMVC?
- 24. Introducción de un contenedor IoC a código heredado
- 25. ¿Cómo usar un contenedor DI/IoC con el archivador modelo en ASP.NET MVC 2+?
- 26. Contenedor IoC, compruebe errores en tiempo de compilación
- 27. arquitectura S # arp vs recta IOC + NHibernate + MVC
- 28. ¿Qué debería construirse a través de un contenedor de IOC?
- 29. Un contenedor de IoC simple para un pequeño sistema de complemento
- 30. Creación de una arquitectura de complementos mínima en Python
¿Qué pasa con el uso de MEF para los complementos? Está diseñado exactamente para ese caso de uso, y es parte del framework .Net. – jeroenh
Eche un vistazo a Spring.Net. –
Dijiste que quieres evitar tener un contenedor IoC y MEF, por lo que no lo publicaré como respuesta. Pero [Autofac] (http://nblumhardt.com/2010/04/introducing-autofac-2-1-rtw/) se integra bastante bien con MEF. –