たとえば、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 つを選択します。