城堡windsor容器可以返回实现2个接口的组件的相同实例

Gar*_*eth 5 castle-windsor

Castle Windsor Container是否可以让一个组件实现两个不同的接口,然后在解析它时返回相同的组件实例?例如;

var windsor = new WindsorContainer()
    .AddComponent<InterfaceA, ClassAB>()
    .AddComponent<InterfaceB, ClassAB>();

var classAB1 = windsor.Resolve<InterfaceA>();
var classAB2 = windsor.Resolve<InterfaceB>();

Assert.AreSame(classAB1, classAB2);
Run Code Online (Sandbox Code Playgroud)

如果我按照所示尝试这个,我得到一个异常,消息已经为给定的密钥注册了一个组件,如果我提供了不同的密钥,那么它将返回该类的两个独立实例ClassAB.

编辑:理想情况下,我想在配置文件中执行此操作.

Mau*_*fer 11

[TestFixture]
public class Forwarding {
    public interface InterfaceA {}

    public interface InterfaceB {}

    public class ClassAB: InterfaceA, InterfaceB {}

    [Test]
    public void tt() {
        var container = new WindsorContainer();
        container.Register(Component.For<InterfaceA, InterfaceB>().ImplementedBy<ClassAB>());
        var a = container.Resolve<InterfaceA>();
        var b = container.Resolve<InterfaceB>();
        Assert.AreSame(a, b);
    }
}
Run Code Online (Sandbox Code Playgroud)