14

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

El contenedor no puede intentar crear la implementación del servicio en sí 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 tengo muy poca suerte.

que momentáneamente había esperanzas suscitadas por el uso de este código:

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

Pero todo Castillo hace con la instancia es hacer un .GetType() en él y se registra el tipo. Las solicitudes del servicio provocarán posteriormente que el contenedor intente crear ese tipo y fallará cuando no pueda completar las dependencias.

Entonces, ¿hay alguna manera de hacer lo que quiero hacer aquí? Si no, crearé algún tipo de IServiceProvider que obtenga la instancia del servicio y no tenga dependencias para que el contenedor complete. Pero esto parece más una solución que la solución correcta.

¿Alguna sugerencia? ¡Gracias!

Respuesta

21

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


Tenga en cuenta: Esta técnica se ha dejado de utilizar. container.Register(Component.For<T>().Instance(myT)); utilizar en su lugar (gracias a eouw0o83hf)

+0

Gracias Gerrie y Bojan! Funcionó una delicia. –

+8

Como una breve nota, esta técnica ahora está en desuso. Use 'container.Register (Component.For () .Instance (myT));' en su lugar. – eouw0o83hf

+0

Ese enlace también está muerto ahora – Liam

2

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

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