Замок Виндзор неверно разрешает именованный экземпляр и неназванный экземпляр - PullRequest
0 голосов
/ 19 ноября 2010

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

[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 Ответ

1 голос
/ 19 ноября 2010

Это не компилируется:

container.Register(Component.For(IMyClass).Instance(genericInstance));

Должно быть:

container.Register(Component.For<IMyClass>().Instance(genericInstance));

Кроме этого, тест проходит для меня (Windsor 2.5.2)

РЕДАКТИРОВАТЬ:

Если вы переверните регистрации, тест не пройден.Это по замыслу.Когда вы решаете без явного имени, вы говорите: «Дайте мне компонент по умолчанию для этой службы», который по умолчанию в Windsor является первым зарегистрированным компонентом для этого типа службы.

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

...