Castle Windsor如何响应实现多个接口的类?

时间:2009-01-27 14:09:28

标签: inversion-of-control castle-windsor ioc-container

例如,我有两个接口:ICustomerService和IOrderService,每个接口都有一些函数,如GetCustomer,GetOrder等。

我希望一个类实现两个接口:Server。

Castle Windsor如何应对此问题? 有可能首先吗? 当我基于两个接口之一解析Server对象时,我会获得相同的对象吗? 当我的构造函数在其参数中包含两个接口时会发生什么?是否还会构建一个对象。

假设LifeStyle保持默认值:Singleton。

2 个答案:

答案 0 :(得分:4)

CLR类型与Windsor服务或组件(glossary if needed is here)之间没有硬性的一对一映射。

所以你可以有以下任何一种情况:

  • 许多具有不同实现类型的组件都会公开单个服务

    container.Register(
       Component.For<IFoo>().ImplementedBy<Foo1>(),
       Component.For<IFoo>().ImplementedBy<Foo2>()
    );
    
  • 许多具有相同实现类型的组件都会公开单个服务

    container.Register(
       Component.For<IFoo>().ImplementedBy<Foo1>(),
       Component.For<IFoo>().ImplementedBy<Foo1>().Named("second")
    );
    
  • 许多具有相同实现类型的组件会公开不同的服务

    container.Register(
       Component.For<IFoo>().ImplementedBy<Foo1>(),
       Component.For<IBar>().ImplementedBy<Foo1>().Named("second")
    );
    
  • 单个组件公开不同的服务

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

正如您所看到的,是的 - 这是可能的,并且您是否会获得相同的实例(假设是单例)取决于您选择的选项 - 如果两个服务都将由相同的组件公开。

答案 1 :(得分:3)

您是否检查了this post

Here

Forum post也有关于此

的信息