2012-01-10 13 views
0

私はAutofacを使用してmy asp.net mvc 3 Webアプリケーションのコントローラを登録しています。現時点では、コントローラ(プラグイン)を含むDLLをロードしなければなりません。その後、タイプを登録します。さて、この問題は、アセンブリのロードから型の登録までのすべてのものを処理するPluginLoaderクラスがあるという事実から来ています。このクラスはautofacコンテナにも登録されています。問題は、それを解決する前にそのクラスを使用するにはどうしたらいいですか?私が意味する、私はautofacでタイプを初期化するときにASP.NET MVC 3コントローラを登録します。

EDIT 1

PluginManager ...アセンブリをスキャンメソッドを呼び出すとコントローラを見つけることが、その後の容器がalredy構築されて、私はプラグインローダークラスを解決し、autofacコンテナを構築しますすべてのプラグインを管理する基本クラスです。これは、基本的にAssembly.Loadメソッドでアセンブリをロードし、DLLをスキャンしてMVCコントローラを検索するPluginLoaderクラスによって異なります。これらのクラスは、autofacコンテナにシングルトンとして登録されます。今、PluginLoaderはコントローラもautofacで登録する必要があります。しかし、これを行うメソッドを呼び出す前に、私はPluginManagerクラスをコンテナから解決する必要があります。これが問題です。それは "循環依存"またはそれに類するもののようです。私はPluginManagerの解決時にコンテナはalredy

+0

しかし、コンテナがすでに –

+0

を初期化していてもバインディングを追加することはできますが、これはベストプラクティスではないことをお読みください。まれに、それがビルドされた後にコンテナを更新する必要があります(これはautofacドキュメントに書かれています) – Stefano

+0

そして、私があなたに尋ねたかったこと、なぜあなたが依存関係を構築しているのかDIフレームワークは適切な場所にありますか? –

答えて

0

PluginLoaderを構築されている、あなたのブートストラップの一部であるように聞こえる - PluginLoaderModule(Autofacクラス)から派生作ってみると、コンテナでモジュールを登録します。このモジュールはプラグインロードロジックをLoad()メソッドでカプセル化できます。

関連する問題