0

次のようなインターフェイスと実装クラスがある場合

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

次に、この登録は問題ありません

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

と同じ

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

しかし、具象クラスを次のように登録しようとすると

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));

それは例外をスローします: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.

制限が意図されている場合、その理由は? 必ずしも必要ではないインターフェイスを追加せずにコレクションの解決を達成する方法はありますか?

4

1 に答える 1

1

代わりに既存のコンポーネントを変更しますか? そうでない場合は、一意の名前を指定してください。

Component.For<X>().Instance(x1).Named("x1")
于 2012-09-17T09:28:29.613 に答える