2011-12-15 22 views
7

leí algunas cosas alrededor en este sitio:¿Dónde debería definir mi NinjectModule y mis fábricas?

  • Lo mejor es configurar nuestro contenedor en el lanzamiento de la aplicación
  • Es mejor evitar hacer nuestras bibliotecas que dependen de un marco de inyección de dependencias es
  • Se recomienda utilizar fábricas para inicializar objetos cuyas propiedades están definidas en el tiempo de ejecución

Uso Ninject. Si entiendo estas recomendaciones, es necesario que:

  • Mis bibliotecas no utilizan NInject.dll
  • Por lo tanto, mis NinjectModules debe estar definido en el proyecto de mi solicitud
  • Mis fábricas (which are created on this principle) DEBE también se definirá en el proyecto de mi aplicación, y no directamente en la biblioteca

Eso parece extraño, especialmente para las fábricas. Tengo muchos proyectos que usan la misma biblioteca. ¿Deberían todos estos proyectos redefinir los módulos y las fábricas de ninject?

¿Qué opinas?

+0

posible duplicado de [La mejor ubicación para la configuración Fluent IOC (Actualmente tratando Ninject)] (http://stackoverflow.com/questions/5733591/best-location-for-fluent-ioc-configuration-currently-trying-ninject) –

Respuesta

1

La configuración no está necesariamente en el ensamblaje de la aplicación. También puede estar en varios ensambles dedicados que contienen nada más que una parte de la configuración. Pero como mencionaste, no debería ser parte de la implementación. En caso de que comparta exactamente la misma configuración en varios proyectos, puede hacer referencia a una existente.

Para las fábricas puede usar Ninject.Extensions.Factory en el futuro para que no tenga que implementarlas usted mismo.

+0

@Filimindji Vea también [esta respuesta de Remo en la pregunta que sugerí como duplicado] (http://stackoverflow.com/a/5746602/11635) –

+0

Me gusta la idea de usar varios ensambles dedicados para la configuración. – Filimindji

+0

¿Cómo se usa Ninject.Extensions.Factory? – Filimindji

1

Esto depende mucho del contexto de sus bibliotecas, como lo hago es:

  • Inicializar todo en un programa previo en el proyecto principal. A pesar de que tienen varios niveles de bootstrappers donde configurar cosas diferentes (principalmente porque uso mis bibliotecas en el mismo tipo de proyectos, por lo que tienen una configuración similar)

  • para mantener este abstraído del marco de la COI, que utilice el ServiceLocator pattern que podrías usar en tus fábricas.

+0

He leído que el uso de ServiceLocator es realmente un antipatrón. Me gustaría evitarlo si es posible. ¿O está bien para las fábricas? – Filimindji

+1

Considero un patrón anti cuando lo usa dentro de sus servicios para obtener dependencias en lugar de inyectarlas en un constructor o como una propiedad, en la fábrica está tratando de abstraer el contenedor Ioc (para que pueda usar uno diferente). –

Cuestiones relacionadas