2011-10-25 19 views
3

私は、DirectoryModuleCatalogの助けを借りてディレクトリからモジュールをロードするPRISMデスクトップアプリケーションを持っています。PRISMでモジュールインスタンスを取得する方法

ロードされたモジュールのインスタンスを取得する方法が見つからないことを除いて、すべて問題ありません。 IModuleManagerとIModuleCatalogには、getInstance(ModuleInfo)などのメソッドはありません。

は、この行は(これは、ModuleManagerによってタイプIModuleManagerである)適切にモジュールをロードしますが、私は、このモジュールの実際のインスタンスを取得するには、次をどうするかを持っているのですか?

moduleManager.LoadModule(moduleInfo.ModuleName); 

を参照してください。

モジュールはユーザーの要求に応じてロードされるため、起動時にブートストラップ内のすべてのモジュールを登録することはできません。

+1

なぜモジュールインスタンスが必要ですか?あなたの問題を説明してください。あなたが考える解決策ではありません。 – PVitt

+0

@PVittロードされたモジュールは特定のインターフェイスを実装しており、ロードされたモジュールインスタンスすべてに対してstart()メソッドを呼び出す必要があります。 – Juergen

+1

なぜすべてのモジュールでstartを呼び出す必要がありますか? – PVitt

答えて

4

Moduleインスタンスによって、IModuleを実装するクラスを意味する場合は、そのインスタンスを取得できるように明示的にコンテナに登録する必要があります。

上記はうまくいきますが、そのアプローチは一切取ってはいけません。モジュールクラスは特定のモジュールに固有であり、モジュールの初期化の目的でのみ使用するべきであるという考えがあります。

私は各モジュールのStartメソッドを別々のコンポーネント(IStartable)に置き、コンテナ内の各コンポーネントを異なるIDで登録し、IEnumerableを解決/インポートしてstartメソッドを持つすべてのインスタンスを取得します。

希望します。

+0

答えをありがとう。私はまさにそれをやった! – Juergen

関連する問題