0
我有以下测试代码尝试获取一个实例的通用和其他特殊用途。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。
有什么想法?
我的错误。发布的代码与实际测试代码几乎没有什么不同。 (Component.For(IMyClass).Instance(genericInstance)); 应该是 container.Register(Component.For(typeof(IMyClass))。Instance(genericInstance)); IMyClass specialOne = container.Resolve(“special”); is IMyClass specialOne = container.Resolve(typeof(IMyClass),“special”); 我发现最后解决导致我的问题。它应该是 IMyClass specialOne = container.Resolve(“special”,typeof(IMyClass)); 编译器不给我错误。 对不起,打扰你们所有人。 –
Tao
2010-11-19 21:22:03
我需要开枪自杀。原始的测试工作。现在我改变了注册顺序。先注册指定类型然后注册未命名类型。它再次给了我同样的例子。但是如果我改变订单,那么它就可以工作。新变化: container.Register(Component.For(typeof(IMyClass))。Instance(specialInstance).Named(“special”)); (Component.For(typeof(IMyClass))。Instance(genericInstance)); – Tao 2010-11-19 22:21:24
@陶:这种行为是由设计,看到我更新的答案。 – 2010-11-20 02:24:38