Tengo lo que es probablemente una simple pregunta aquí sobre el Castillo de Windsor, que no he estado usando por mucho tiempo. Estoy intentando registrar un servicio con una instancia específica que será el singleton de la implementación del servicio.

El contenedor no puede intentar crear la aplicación de servicio de sí misma, porque tiene dependencias que el contenedor no será capaz de resolver. Tengo una instancia del servicio y quiero que sea el único ejemplo utilizado por cualquier persona que solicita el servicio. Pero me parecen tener muy poco de suerte.

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

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

Pero todo el Castillo con la instancia es hacer una .GetType() sobre él y registrar el tipo. Las solicitudes para el servicio, posteriormente, hacer que el contenedor para intentar crear ese tipo y error cuando no pueden llenar las dependencias.

Entonces, ¿hay alguna manera de hacer lo que quiero hacer aquí? Si no voy a crear algún tipo de IServiceProvider que recuperar la instancia del servicio y no tienen dependencias para el recipiente a llenar. Pero esto se siente como más de un trabajo alrededor de la solución de la derecha.

Alguna sugerencia? Gracias!

2 Comentarios

  1. 27

    Trate de usar el AddComponentInstance método en el contenedor del objeto de Núcleo. Yo creo que esto es lo que usted necesita.


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

    • Gracias Gerrie y Bojan! Trabajó un tratamiento.
    • Como una breve nota, esta técnica está ahora en desuso. Uso container.Register(Component.For<T>().Instance(myT)); lugar.
    • Ese enlace también muertos ahora
    • tener problemas de adición de instancia de una interfaz. funciona cuando intento registrar como una clase concreta
  2. 2

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

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

Dejar respuesta

Please enter your comment!
Please enter your name here