我有以下测试代码试图为通用和其他特殊目的获取一个实例。
[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。
有什么想法吗?
答案 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中是该服务类型的第一个注册组件。
如果您需要在相同服务类型下使用不同的组件,请在注册和解析时为所有组件指定显式名称。