5

たとえば、ICustomerService と IOrderService の 2 つのインターフェイスがあり、それぞれに GetCustomer、GetOrder などの関数がいくつかあります。

1 つのクラスで両方のインターフェイスを実装する必要があります: Server.

キャッスル ウィンザーはこれにどのように対応しますか? そもそも可能ですか?2 つのインターフェイスのいずれかに基づいてサーバー オブジェクトを解決すると、同じオブジェクトが得られますか? パラメーターに両方のインターフェースを持つコンストラクターがあるとどうなりますか? まだ1つのオブジェクトが構築されていますか。

LifeStyle がデフォルトの Singleton のままであると仮定します。

4

1 に答える 1

4

CLR 型と Windsor サービスまたはコンポーネントの間に厳密な 1 対 1 のマッピングはありません (用語集は必要に応じてこちらにあります)。

したがって、次のシナリオのいずれかを使用できます。

  • 実装タイプが異なる多くのコンポーネントが単一のサービスを公開します

    container.Register(
       Component.For<IFoo>().ImplementedBy<Foo1>(),
       Component.For<IFoo>().ImplementedBy<Foo2>()
    );
    
  • 同じ実装タイプの多くのコンポーネントが単一のサービスを公開します

    container.Register(
       Component.For<IFoo>().ImplementedBy<Foo1>(),
       Component.For<IFoo>().ImplementedBy<Foo1>().Named("second")
    );
    
  • 同じ実装タイプの多くのコンポーネントが異なるサービスを公開します

    container.Register(
       Component.For<IFoo>().ImplementedBy<Foo1>(),
       Component.For<IBar>().ImplementedBy<Foo1>().Named("second")
    );
    
  • 単一コンポーネントが異なるサービスを公開

    container.Register(
       Component.For<IFoo, Bar>().ImplementedBy<Foo1>()
    );
    

ご覧のとおり、可能です。同じインスタンス (シングルトンを想定) を取得するかどうかは、選択したオプション (両方のサービスが同じコンポーネントによって公開されるかどうか) によって異なります。

于 2011-04-23T03:42:52.693 に答える