【问题标题】:How does Castle Windsor respond to a class which implements multiple interfaces?Castle Windsor 如何响应实现多个接口的类?
【发布时间】:2010-10-03 18:25:34
【问题描述】:

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

我想要一个类来实现这两个接口:Server。

温莎城堡对此有何反应? 一开始有可能吗? 当我基于两个接口之一解析服务器对象时,我会得到相同的对象吗? 当我有一个在其参数中具有两个接口的构造函数时会发生什么?是否还会构造一个对象。

假设 LifeStyle 保留其默认值:Singleton。

【问题讨论】:

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


    【解决方案1】:

    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>()
      );
      

    如您所见,是的 - 有可能,您是否会获得相同的实例(假设为单例)取决于您选择的选项 - 两个服务是否将由同一个组件公开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多