Question

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?

Was it helpful?

Solution

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")
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top