Замок Виндзор неверно разрешает именованный экземпляр и безымянный

У меня есть следующий код тестирования, пытающийся получить один экземпляр для универсального и другой для специального назначения.

[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 является первым зарегистрированным компонентом для этого типа службы.

Если вам нужны разные компоненты под одним и тем же типом сервиса, присвойте им все явные имена при регистрации и разрешении.

Другие вопросы по тегам