Вопрос

If I have interface and implementing classes like

public interface IA {}
public class X : IA {}
public class Y : IA {}

then this registering is fine

var w = new WindsorContainer();
w.Register(Component.For<IA>().ImplementedBy<X>());
w.Register(Component.For<IA>().ImplementedBy<Y>());

same as

var w = new WindsorContainer();
w.Register(Component.For<IA>().Instance(new X()));
w.Register(Component.For<IA>().Instance(new Y()));

But if I try to register concrete classes as

var w = new WindsorContainer();
var x1 = new X();
var x2 = new X();
w.Register(Component.For<X>().Instance(x1));
w.Register(Component.For<X>().Instance(x2));

it throws an exception: Castle.MicroKernel.ComponentRegistrationException : Component X could not be registered. There is already a component with that name. Did you want to modify the existing component instead? If not, make sure you specify a unique name.

If it is intended limitation - why? Is there any way to achieve collection resolve without adding interface that is not always necessary?

Это было полезно?

Решение

Did you want to modify the existing component instead? If not, make sure you specify a unique name.

Component.For<X>().Instance(x1).Named("x1")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top