Estoy usando castle windsor para un proyecto de mascota en el que estoy trabajando. Estoy comenzando a darme cuenta de que necesito llamar al contenedor IoC en diferentes lugares de mi código para crear nuevos objetos. Esta dependencia en el contenedor hace que mi código sea más difícil de mantener.IoC, ¿dónde colocas el contenedor?
Hay dos soluciones que he usado para resolver este problema
Intenté crear fábricas abstractos como envolturas alrededor del recipiente que podía inyectar en partes de mi aplicación que necesitan para crear objetos. Esto funciona pero tiene algunos inconvenientes porque Castle tiene dificultades para inyectar su propio contenedor como dependencia. Así que tengo que hacer eso a mano, este tipo de derrotas todo el propósito del contenedor IoC.
He utilizado la clase principal applicationcontroller para envolver el contenedor IoC y trabajar como fábrica central/repositorio. Esto fue bastante exitoso, pero esta clase se está haciendo demasiado grande y actúa como un dios-objeto central, casi todos los demás objetos tienen una referencia.
Ambas soluciones tipo de trabajo, pero ambas tienen sus inconvenientes. Así que tengo curiosidad si otras personas tuvieran el mismo problema y hubieran encontrado mejores soluciones.
edición El problema no es para un objeto que depende de objeto B. Aquí por lo general sólo tiene que utilizar la inyección de constructor y todo funciona. A veces tengo objetos de tipo A que necesitan crear una cantidad variable de otros objetos de tipo B durante su vida útil. No estoy seguro de cómo hacer esto.
@Blair Conrad: los problemas de mantenimiento no son graves hasta ahora. Tuve algunas clases que dependen del objeto contenedor que llama al contenedor. Resuelva <>. Y no quiero tener mi código dependiendo de lo que creo que es infraestructura. Todavía estoy probando cosas, así que noté que tenía que cambiar un montón de código cuando cambiaba de ninject a castle para este proyecto.
@flowers: Hmm. Me gusta tu solución de puños. Combina las cosas que funcionan con ambas soluciones que he probado. Creo que todavía estaba pensando demasiado en objetos y no lo suficiente en interfaces/responsabilidades. Intenté construir fábricas con propósito, pero me gustaría que usen el contenedor detrás de escena para crear los objetos y no he descubierto cómo puedo DI el contenedor en objetos de una manera limpia.
Tengo curiosidad y las respuestas pueden ayudarnos a responder. ¿Qué tipo de problemas de mantenimiento ha tenido? –