2009-03-23 2 views
7

私は自分のIOCコンテナ(ウィンザー)にアクセスしたいクラスを持っていますが、静的なIWindsorContainerプロパティを保持したくない - 私はコンテナコンストラクタの依存関係としてIWindsorContainerを必要とするすべてのクラスに自身を挿入します。クラスへのパラメータとしてのIWindsorContainer

私はUnityでこの問題を解決しましたが、Windsorコンテナで同じことを試みると、IWindsorContainerがコンテナに登録されていないことがわかります。

私は、IWindsorContainer => WindsorContainerを登録することはできません。これは、コンテナが新しい(または別の)インスタンスを作成して自分のクラスに渡すため、そのインスタンスにはすべてmyその他のタイプは登録済みです。コンテナを構築し、その中のすべての型を登録し、そのインスタンスをIWindsorContainerに対して登録する方法も見当たりません。登録メソッドはすべて、サービスと実装のための型だけを取ります。

答えて

8

通常、アプリケーションコンポーネントにコンテナを挿入したくない場合。

は(この質問は、それらのほとんど重複している)これらの質問を参照してください:

:あなたが自由のためIKernelの注射を取得し、あなたはです。レジスタIWindsorContainer:mauschが言ったように、あなたのコンポーネントにあなたのコンテナを渡す前に、

container.Register(Component.For<IWindsorContainer>().Instance(container)); 
+0

IKernalが私のために働いた。私のクラスのためにWindsorContainer全体を必要としませんでした。 – DavGarcia

1

は一般的に、二回だと思います。 本当ににはコンテナにアクセスする必要がありますか?

コンテナから依存関係を引き出すには、typed factoriesを使用します。

0

私は最近これを行うように誘惑されました。私は、オブジェクトの存続期間中に複数のサービスインスタンスを作成できるようにしたいと考えていました。依存関係の必要性がより明確になるので、工場を登録する方が良いでしょう。しかしサービスごとの工場を作ることは苦痛のようでした。

私はこの記事のコードのようなものを使用して終了しました:http://mikehadlow.blogspot.com/2010/01/10-advanced-windsor-tricks-1a-delegate.html。 IServiceのインスタンスを作成する必要があるクラスがあるとします。この記事では、あなたのクラスがFuncに依存することを可能にするテクニックについて説明します。そのクラスに固有のファクトリを自動的に取得します。

関連する問題