windsor tutorial ioc container c# dependency-injection inversion-of-control castle-windsor

ioc - castle windsor c# tutorial



Especificación de instancia para el registro de un componente con Castle Windsor (2)

Intente usar el método AddComponentInstance en el objeto Kernel del contenedor. Creo que esto es lo que necesitas.

Por favor, tenga en cuenta: Esta técnica ahora está en desuso. Use container.Register(Component.For<T>().Instance(myT)); en su lugar (gracias a eouw0o83hf)

Tengo lo que probablemente sea una pregunta simple aquí sobre Castle Windsor, que no he estado usando por mucho tiempo. Estoy tratando de registrar un servicio con una instancia específica que será la implementación única del servicio.

El contenedor no puede intentar crear la implementación del servicio en sí mismo porque tiene dependencias que el contenedor no podrá resolver. Tengo una instancia del servicio y quiero que sea la única instancia utilizada para cualquiera que solicite el servicio. Pero parece que estoy teniendo muy poca suerte.

Tuve momentáneamente esperanzas al usar este código:

container.Register(Component.For<IMyInterface>().Instance(serviceObj));

Pero todo lo que Castle hace con la instancia es hacer un .GetType () en él y registrar el tipo. Las solicitudes para el servicio posteriormente harán que el contenedor intente crear ese tipo y fallará cuando no pueda llenar las dependencias.

Entonces, ¿hay alguna manera de hacer lo que quiero hacer aquí? Si no, crearé algún tipo de IServiceProvider que recupere la instancia del servicio y no tenga dependencias para que se llene el contenedor. Pero esto se siente más como un trabajo alrededor de la solución correcta.

¿Alguna sugerencia? ¡Gracias!


Puedes hacerlo a través de la propiedad Kernel del contenedor:

container.Kernel.AddComponentInstance<IMyInterface>(serviceObj);