Pregunta

Estoy en un gran dilema .. Estoy trabajando en aplicación web altamente modular en ASP.NET MVC 2 (de hecho, el núcleo será súper ligero, todo el trabajo en módulos / plugins). He encontrado MEF bastante útil para módulos de descubrimiento, pero no quiero que nos como contenedor de IoC. Hay muy buena oportunidad que necesitaré características avanzadas de "verdadero" contenedor IoC, así que me gustaría utilizar la unidad.

Y aquí está el problema: cómo permitir a los módulos de contenedores de configuración (mediante programación) = registrar sus propios tipos de controladores (MVC, implementaciones personalizadas de servicios ...) en el inicio de la aplicación sin que la dependencia duro en la unidad en todos los módulos? Yo sé de proyecto Common Service Locator, y parece bastante bueno, pero el envase co interfaz sólo permite resolver los tipos, no registrarlas (que yo sepa).

Realmente espero que pueda entender mi punto, sé que mi Inglés es terrible (soy de un país que no hablan Inglés :) ¡Muchas gracias!

¿Fue útil?

Solución

No puedo menos que simpatizar con no querer usar MEF como un contenedor de DI, pero creo que todavía se debe considerar si que pueden no ser aplicables para sus complementos.

ya requieren sus complementos para usar MEF , por lo que todos tendrán una dependencia duro en él. Aunque yo personalmente no me gusta el enfoque no modificable, basada en atributos utilizados por el MEF, parece que usted está pidiendo cómo cada complemento puede registrarse con el DI de contenedores. Eso también suena como la codificación dura para mí, por lo que también podría simplemente usar MEF hasta el fondo.

La aplicación de los atributos MEF es registro de componentes.

Si realmente no quiere usar MEF es suficiente con algunas otras opciones (ninguno de ellos en particular más atractivo):

  • Exigir que todos los complementos tomar también una dependencia duro en la Unidad. Entiendo completamente por qué no quiere hacer esto, pero yo estoy incluyendo esta opción en aras de la exhaustividad
  • Exigir que todos los complementos tomar también una dependencia duro en Servicio de Localización Común. En mi opinión, esto sólo desplaza el problema ligeramente.
  • Definir su propio complemento de registro de la interfaz que todos los complementos deben implementar. A continuación, puede escribir su propia aplicación que utiliza la unidad, de manera que todos los complementos registran a sí mismos en contra de esta interfaz, pero entonces sería más o menos justo estar duplicando las características de MEF.
  • Escribir todos los complementos en un DI-amigable, pero independiente del contenedor estilo. Esto deja el problema con la configuración de la DI de contenedores, y a continuación, tendrá que recurrir a la configuración XML para eso. Esta es una muy quebradiza y enfoque puede conducir rápidamente a demonios mantenimiento , por lo que una vez más, sólo estoy incluyendo esta opción en aras de la exhaustividad.

Usando MEF para los complementos no le impide el uso de la unidad en su aplicación principal, pero entiendo que es muy ligero, por lo que no puede hacer mucho sentido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top