2009-01-27 7 views
5

Por ejemplo, tengo dos interfaces: ICustomerService y IOrderService el que cada uno tiene un par de funciones como GetCustomer, getOrder, etc.¿Cómo responde Castle Windsor a una clase que implementa múltiples interfaces?

quiero una clase para implementar ambas interfaces: Servidor.

¿Cómo responde Castle Windsor a esto? ¿Es posible en primer lugar? Cuando resuelvo el objeto Servidor basado en una de las dos interfaces, ¿obtendré el mismo objeto? ¿Qué sucede cuando tengo un constructor que tiene ambas interfaces en sus parámetros? ¿Todavía habrá un objeto construido?

asumiendo que LifeStyle se deja por defecto: Singleton.

Respuesta

3

¿Has verificado this post?

Here también

Forum post también tiene información sobre este

+1

Sí, los he comprobado. La primera publicación no es lo mismo que mi pregunta, el error en la segunda publicación es causado por una versión anterior de Castle. El archivo de código de la publicación que contiene las pruebas es útil, muestra que solo se utiliza un objeto. –

+1

La publicación en el foro tiene la solución –

+0

publicación en el foro es un enlace inactivo; [esta respuesta] (http://stackoverflow.com/a/684392/322283) es útil; como es la respuesta de Krysztof a continuación. – Marijn

3

No hay disco correlación de uno a uno entre un tipo CLR y un servicio de Windsor o componente (glossary if needed is here).

para que pueda tener cualquiera de los siguientes escenarios:

  • muchos componentes con diferentes tipos de implementación de exponer a un solo servicio

    container.Register(
        Component.For<IFoo>().ImplementedBy<Foo1>(), 
        Component.For<IFoo>().ImplementedBy<Foo2>() 
    ); 
    
  • muchos componentes con mismo tipo de implementación de exponer a un solo servicio

    container.Register(
        Component.For<IFoo>().ImplementedBy<Foo1>(), 
        Component.For<IFoo>().ImplementedBy<Foo1>().Named("second") 
    ); 
    
  • Hombre Y Componentes con mismo tipo de implementación exponga diferentes servicios

    container.Register(
        Component.For<IFoo>().ImplementedBy<Foo1>(), 
        Component.For<IBar>().ImplementedBy<Foo1>().Named("second") 
    ); 
    
  • solo componente exponer diferentes servicios

    container.Register(
        Component.For<IFoo, Bar>().ImplementedBy<Foo1>() 
    ); 
    

Como se puede ver, sí - es posible, y si no se le obtener la misma instancia (suponiendo que sea singleton) depende de la opción que elija, si ambos Servicios estarán expuestos por el mismo Componente, o no.

Cuestiones relacionadas