2012-05-11 14 views
1

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つを選択します。

答えて

-1

ウィンザーのService Overridesは、あなたがしたいことに適しています。

+0

サービスのオーバーライドがどのように役立つかわからない限り、これについて詳しく説明できますか? –

+0

再読み込み後、実行時に決定されるいくつかの「値」に基づいてコンポーネントを解決するように思えますか?このようなものがあなたのために働くか:http://stackoverflow.com/questions/8941055/setting-the-name-property-during-registration-of-a-component-using-castle-windso/8954362 – PatrickSteele

+0

私はあなたが言いました。私が現在使用しているものはそこに記述されていますが、私の答えの最後の文には、そこに記述されているエラーもあります。 –

関連する問題