1

たとえば、FirstClassForMe、FirstClassForYou、SecondClassForMe、SecondClassForYou など、いくつかの実装を持つ 2 つのインターフェイス IFirst と ISecond があるとします。

それらをIoCコンテナーに登録したい(ライフスタイルに関係なく):

this.container.Register(
    Component.For<IFirst>().ImplementedBy<FirstClassForMe>().Named("Me"),
    Component.For<IFirst>().ImplementedBy<FirstClassForYou().Named("You"), 
    Component.For<ISecond>().ImplementedBy<SecondClassForMe>).Named("Me"),
    Component.For<ISecond>().ImplementedBy<SecondClassForYou>().Named("You"))

これを次のように使用したいと思います。

var forWho = this.GetCode();
var first = this.Container.Resolve<IFirst>(forWho);
var second = this.Container.Resolve<ISecond>(forWho);
this.Work(first, second);

しかし、windsor では、ComponentRegistrationException が発生します。

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

ただし、登録ごとにペア (インターフェイス、コード) が一意である限り、この依存関係を解決することは可能だと思います。このシナリオに従ってウィンザーを機能させることは可能ですか? たとえば、IFirst のすべての登録を検索し、名前で 1 つを選択します。

4

1 に答える 1