6

単一のシングルトン スタイルのインスタンスがコンテナーを介して 2 つ以上のサービスを提供できるように、Windsor コンテナーを構成したいと考えています。

複数のコンポーネント宣言 (XML ベースの構成) で同じ型を使用すると、各コンポーネントのサービス インターフェイスを提供するためにその型のインスタンスが作成されることがわかりましたが、これは私が望む動作ではありません。

例えば:

interface IA { }
interface IB { }
class AB : IA, IB { ... } 

AB の 1 つのインスタンスで IA サービスと IB サービスの両方を提供したいと考えています。

これを行いたい具体的な理由は、具体的な DAO 実装が複数のインターフェイスを拡張するためです。反対に、さまざまなインターフェイスへの参照を保持するワーカー コンポーネントがいくつかあります。具体的な DAO インスタンスはこれを尊重しますが、これらの個別のワーカー コンポーネントのコンストラクターは、個別のインターフェイスの実装を必要とし、Castle.Windsor がそれぞれのサービス リクエストを介してこれらのワーカー コンテナーに同じオブジェクト インスタンスを渡すことを望みます。

笑、泥のように澄んでいたと思います!:P

コンポーネントの XML 構成を介してこれを達成する方法を知っている人はいますか?

4

4 に答える 4

3

この質問に対する回答(特にフォーラムの投稿リンク) を確認しましたか? 一部の例では Transient ライフサイクルを使用していますが、Singleton でも機能すると思います。

フォーラムへの投稿の主な見返りは次のとおりです。

container.Register(Component.For<IEntityIndexController, ISnippetController>()
.ImplementedBy<SnippetController>()
.LifeStyle.Transient); 

解決策は流暢なインターフェイス (および最近のトランク ビルド) を使用することであり、最後に見た xml で構成することはできませんでした。ただし、施設によっては可能な場合もあります。

幸運を!

于 2009-03-26T03:14:58.913 に答える
1

メソッドを使用してみましたかForward

container.Register(Component.For<IEntityIndexController>()
.ImplementedBy<SnippetController>()
.Forward (typeof(ISnippetController))
.LifeStyle.Transient);

私の実験とドキュメントから:

このコンポーネントに代わってサービス タイプを登録する

私はそれがトリックを行うべきだと思います。

于 2009-07-15T07:24:09.813 に答える
0

私は同じ答えを探していましたが、この投稿はグーグルで得られる最も遠いものです. 私はそれを使用して見つけました

Classes.FromThisAssembly().Where(t => t.FullName == "Namespace.Classname").WithServiceAllInterfaces()

私のためにトリックを行うようです。

于 2014-06-05T15:38:15.973 に答える
0

オブジェクトのインスタンス (実装ではなく) を登録して、さまざまな実装を担当することができます。

  var ab = new AB();
  container.Register( Component.For<IA>().Instance( ab) );
  container.Register( Component.For<IB>().Instance( ab) );

私はそれがうまくいくと信じています。ただし、明らかな理由により、コード構成が必要です。

于 2009-03-26T14:36:38.760 に答える