2009-03-23 21 views
7

Tengo una clase que quiero tener acceso a mi contenedor IOC (Windsor), sin embargo, no quiero mantener una propiedad estática IWindsorContainer dando vueltas - Preferiría tener el contenedor se inyecta en cualquier clase que requiera un IWindsorContainer como dependencia de constructor.IWindsorContainer como parámetro para una clase

He logrado esto con Unity, pero cuando intento lo mismo con el contenedor de Windsor, me dice que IWindsorContainer no está registrado en el contenedor.

No creo que pueda registrar IWindsorContainer => WindsorContainer, porque eso hará que el contenedor cree una instancia nueva (o diferente) de sí misma para pasar a mi clase, y esa instancia no tendrá todo mi otros tipos registrados con ella. Tampoco veo una forma de construir el contenedor, registrar todos los tipos en él, y luego registrar esa instancia de sí mismo contra IWindsorContainer; todos los métodos de registro solo toman tipos para el servicio y la implementación, nunca una instancia concreta real.

Respuesta

8

Generalmente, no desea inyectar el contenedor en los componentes de la aplicación.

ver estas preguntas (esta pregunta es casi un duplicado de ellos):

Por cierto: se obtiene IKernel inyección de forma gratuita, y usted puedeIWindsorContainer registro:

container.Register(Component.For<IWindsorContainer>().Instance(container)); 
+0

IKernal funcionó para mí. No necesité todo el WindsorContainer para mi clase. – DavGarcia

1

En general, como mausch dijo, piensan dos veces antes de que pase su contenedor a su componente. ¿Tiene realmente necesita tener acceso al contenedor?

Para extraer dependencias del contenedor, use typed factories.

0

Estuve tentado de hacer esto recientemente. Quería poder crear varias instancias de un servicio durante la vida de un objeto. Registrar una fábrica sería mejor porque la necesidad de la dependencia es más clara. Pero crear una fábrica por servicio parecía un dolor.

Terminé usando algo como el código en este artículo: http://mikehadlow.blogspot.com/2010/01/10-advanced-windsor-tricks-1a-delegate.html. Supongamos que tiene una clase que necesita crear instancias de IService. El artículo describe una técnica que le permite a su clase tener una dependencia de Func, y obtendrá automáticamente una fábrica específica para esa clase.

Cuestiones relacionadas