Castle Windsor解析命名实例和未命名实例不正确

时间:2010-11-19 17:11:00

标签: castle-windsor

我有以下测试代码试图为通用和其他特殊目的获取一个实例。

[TestMethod]
public void Test_Name_And_Named_Instances()
{
//MyClass implemented IMyClass
MyClass genericInstance = new MyClass("generic");
MyClass specialInstance = new MyClass("special");

IWindsorContainer container = new WindsorContainer();
container.Register(Component.For(IMyClass).Instance(genericInstance));
container.Register(Component.For(IMyClass).Instance(specialInstance).Named("special"));

IMyClass genericOne = container.Resolve<IMyClass>();
IMyClass specialOne = container.Resolve<IMyClass>("special");

Assert.AreSame(genericOne, genericInstance); //true
Assert.AreNotSame(genericOne, specialOne); //false
}

我希望得到两个不同的实例,但结果是genericOne和specialOne指向同一个objec genericInstance。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这不编译:

container.Register(Component.For(IMyClass).Instance(genericInstance));

应该是:

container.Register(Component.For<IMyClass>().Instance(genericInstance));

除此之外,the test passes for me(温莎2.5.2)

编辑:

如果您翻转注册,则测试失败。这是设计的。当您在没有明确名称的情况下解决时,您会说“给我这个服务的默认组件”,默认情况下,它在Windsor中是该服务类型的第一个注册组件。

如果您需要在相同服务类型下使用不同的组件,请在注册和解析时为所有组件指定显式名称。