Замок Виндзор неверно разрешает именованный экземпляр и безымянный
У меня есть следующий код тестирования, пытающийся получить один экземпляр для универсального и другой для специального назначения.
[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 указывают на один и тот же объект genericInstance.
Любая идея?
1 ответ
Это не компилируется:
container.Register(Component.For(IMyClass).Instance(genericInstance));
Должно быть:
container.Register(Component.For<IMyClass>().Instance(genericInstance));
Кроме этого, тест проходит для меня (Виндзор 2.5.2)
РЕДАКТИРОВАТЬ:
Если вы перевернете регистрации, тест не пройден. Это по замыслу. Когда вы решаете без явного имени, вы говорите "дайте мне компонент по умолчанию для этой службы", который по умолчанию в Windsor является первым зарегистрированным компонентом для этого типа службы.
Если вам нужны разные компоненты под одним и тем же типом сервиса, присвойте им все явные имена при регистрации и разрешении.