Creo que la respuesta a esta pregunta es tan obvia que nadie se ha molestado en escribir sobre esto, pero es tarde y realmente no puedo entender esto.Uso de contenedores IoC; específicamente Windsor
He estado leyendo en contenedores IoC (Windsor en este caso) y me falta cómo hablas con el contenedor desde varias partes de tu código.
Obtuve DI, he estado haciendo ma's pobres DI (constructores vacíos llamando a constructores de inyección sobrecargados con implementaciones de parámetros predeterminadas) durante algún tiempo y puedo ver completamente el beneficio del contenedor. Sin embargo, me falta una pieza vital de información; ¿cómo se supone que debes hacer referencia al contenedor cada vez que necesites un servicio de él?
¿Creo un ataque global único que paso por alto? ¡Seguramente no!
Sé que debería llamar a esto:
WindsorContainer container = new WindsorContainer(new XmlInterpreter());
(por ejemplo) cuando quiero cargar mi config XML, pero entonces, ¿qué hago con el contenedor? ¿La creación de un nuevo contenedor cada vez que persiste la configuración cargada a través de algunos majicks estáticos internos o de lo contrario, o tengo que volver a cargar la configuración cada vez (supongo que no, o lifecycles couldnt).
No comprender esto me impide trabajar en cómo funcionan los ciclos de vida, y seguir adelante con el uso de algunos COI awsomeness
Gracias,
Andrew
En realidad, muchos entornos tienen una clase de "raíz global" en alguna parte, si la buscas. Silverlight y WPF tienen la clase App (código subyacente para App.xaml) que es un lugar tan bueno como cualquier otro para anclar un contenedor IOC. Para WPF y Silverlight más grandes, definitivamente desearía ver Prism, que proporciona herramientas de estructuración a gran escala y Unity, que es el contenedor IOC de MS. –
@Cylon: y ASP.NET tiene Application_Start(), pero eso no significa que le permita interceptar la creación de objetos. Solo significa que tienes un lugar para configurar el contenedor. –
ASP.NET WebForms La creación de páginas se puede interceptar y las páginas se 'crean' para DI al hacer una PageHandlerFactory y registrar la implementación en web.config. Ver http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=81#comm –