inversion-of-control - CaSTLe Windsor 如何响应实现多个接口(interface)的类?

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

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

我想要一个类来实现这两个接口(interface):服务器。

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

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

最佳答案

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

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

    关于inversion-of-control - CaSTLe Windsor 如何响应实现多个接口(interface)的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/483515/

    相关文章:

    c# - 通过 SimpleInjector 注册单例并返回相同的实例,对于它实现的不同接口(interface)

    c# - CaSTLe 不断给我一个 System.TypeLoadException : Method 'myMethod' does not have implementation?

    ios - 为什么 Objective-C 中的 Ioc-Containers 不是一种流行的方法?

    java - 如何在使用spring自动布线时传递构造函数参数?

    spring - JavaEE 有控制反转吗?

    c# - 将 Windsor Logging Facility 安装到图书馆中

    python - SQLAlchemy/Python : Using an engine per process, 并将该引擎注入(inject)依赖项

    wpf - WPF UserControl上的依赖注入(inject)(Windsor)

    c# - CaSTLe 依赖注入(inject) 生活方式

    c# - Unity 无法解析基本依赖链