IFirstとISecondの2つのインタフェースがあり、両方ともいくつかの実装例があります。 FirstClassForMe、FirstClassForYou、SecondClassForMe、SecondClassForYou。城ウィンザー3.0同じ名前の異なるサービス - どのように?
私は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);
をしかしウィンザーに、私はComponentRegistrationExceptionを得る
コンポーネントMeを登録できませんでした。すでにその名前のコンポーネントがあります。代わりに既存のコンポーネントを変更しますか?そうでない場合は、一意の名前を指定してください。
しかし、登録ごとにペア(インターフェイス;コード)が一意である限り、この依存関係を解決することは可能です。このシナリオに従ってウィンザーを動作させることは可能ですか?例えば。 IFirstのすべての登録を検索し、名前で1つを選択します。
サービスのオーバーライドがどのように役立つかわからない限り、これについて詳しく説明できますか? –
再読み込み後、実行時に決定されるいくつかの「値」に基づいてコンポーネントを解決するように思えますか?このようなものがあなたのために働くか:http://stackoverflow.com/questions/8941055/setting-the-name-property-during-registration-of-a-component-using-castle-windso/8954362 – PatrickSteele
私はあなたが言いました。私が現在使用しているものはそこに記述されていますが、私の答えの最後の文には、そこに記述されているエラーもあります。 –