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