2011-10-13 5 views
5

私はサードパーティのアプリケーション用のプラグインをビルドしています。私のプラグインは、Autofacを使ってさまざまなコンポーネントを接続しています。コンテナはアプリケーションの起動時に構築されますが、ホストアプリケーションは後で自分のコマンドを呼び出します。コンポーネントをAutofacコンテナに一時的に登録することはできますか?

コマンドが呼び出されると、ホストアプリケーションは、それが定義するいくつかのタイプのインスタンスと、自分のコンポーネントが使用する必要があるインスタンスを提供します。これらのインスタンスをコンテナに登録して、これらのインスタンスに依存するコンポーネントを配線することができるようにしたいと思います。

ContainerBuilderを使用して既存のコンテナを更新できますが、コマンドが完了した時点でこれらのインスタンスが無効になるため、これらの登録を削除したいと思います。これは可能ですか?

2つのコンテナを使用する方が良いかもしれません...これらのインスタンスを登録する新しいコンテナを作成し、アプリケーションスコープのコンテナから他のコンポーネントを解決できる可能性があります。

解決方法呼び出しがアプリケーションスコープのコンテナにバブルアップするように、2つのコンテナを接続するにはどうすればよいですか?

このアプローチには気付いている問題はありますか?私は、部品寿命の問題があるかもしれないと想像...

編集:は今、私は少しより多くの研究とテストをやったし、それは結局のところ、私はちょうどBeginLifetimeScope(アクション<ContainerBuilder>)を登録するオーバーロードを使用することができますホストアプリケーションは、ネストされた存続期間のインスタンスのみを提供しました。なんらかの理由で、入れ子にされた生涯に登録を追加すると、それらがルートコンテナに追加されることになりますが、そうではないようです。

+0

はい、LifetimeScopeは、この場合、まさにあなたが望むものです。あなたの質問への回答を投稿し、それを受け入れたものとしてマークして、この質問を見つけた人々が答えを得るようにしてください。 –

+0

ありがとう、私は以前私の答えを投稿しようとしたが、私はまだ十分な評判のポイントがないので、私は8時間待たなければならないと言った... –

+0

Yay!私は今、私の答えを投稿することができますが、明日までそれを受け入れることはできません... –

答えて

3

私の上記の編集で指摘したように、BeginLifetimeScope(アクション<ContainerBuilder>)が私の必要とするものです。なんらかの理由で、入れ子にされた生涯に登録を追加すると、それらがルートコンテナに追加され、ネストされた生存期間のスコープが終了した後に解決できると考えられましたが、それはそうではありません。

関連する問題