2010-12-14 31 views
1

Shellのブートストラップで利用できるだけでなく、 PRISMアプリケーション。プリズムを利用したWPF/Silverlightモジュールの作成方法プリズム以外のアプリケーションに埋め込むことも可能

簡単に言えば、PRISMモジュールをシェルから初期化するのではなく、モジュール自体から初期化する方法はありますか?

Ulimateの目標は、非PRISMアプリケーションによって初期化できるWPF/Silverlight PRISMモジュールを持つことです。

答えて

2

これには障壁がありません。

IModuleインターフェイスは、パラメータがない単一のvoidメソッドを持っています。Initialize()

非プリズムアプリケーションは、そのメソッドを呼び出すことによってモジュールを初期化できます。それでおしまい。

他のアプリケーションは、異なるインターフェースと、モジュールはそのインターフェイスを実装することができ、およびどのインタフェースが使用は、単にInitialize()を呼び出すことができる初期化方法、またはその逆の本体、異なるプラグインシステムを持っている場合。例えば

public interface IMyPluginModule 
{ 
    void StartModule(); 
} 

public class MyModule : IModule, IMyPluginModule 
{ 
    public void Initialize() 
    { 
     // actual initialization code here 
    } 

    public void StartModule() 
    { 
     Initialize(); 
    } 
} 
+0

しかし、モジュールは、Non-prismアプリケーションからUnityContainer、RegionManager、またはEventAggregatorのハンドルを取得するか、ハンドルがnullの場合はモジュールを作成する必要がありますか? – dev999

+1

私はあなたが "ハンドルを手に入れよう"という意味を理解していませんが、このプリズム以外のアプリケーションがこれらのものを使用しているかどうかに依存します。例えば、あなたのモジュールが 'IUnityContainer'を扱うように設計されていて、他のアプリケーションがCastle Windsorを使用しているのであれば、すべての呼び出しをWindsorに委譲する新しい' IUnityContainer'実装を作成したいと思うでしょう。 'IRegionManager'と同じことです。また、プリズムコンポーネントを消費する代わりに、DI、ビュー管理、イベント集約などを委譲する抽象レイヤーを追加してモジュールを設計します。 – Jay

+0

私がやったことはあなたが提案したあなたの代わりのアプローチです。しかし、何とかIModule内からIUnityContainerとIRegionManagerを初期化することは、私にとってはうまくいかないようです。私はコンテナと、一般的なboostrapperで言及されている他のすべてのものを設定しましたが、モジュールintialiserに渡されたコンテナ(非プリズムの)を使ってコードから領域を動的に追加する方法はわかりません。私はRegionManager.SetRegionName(コンテナ、 "MainControlRegion")を使用しました。 RegionManager。UpdateRegions();しかし、それは役に立たないようです。 – dev999

1

それは一見見た目よりも少し複雑ですが、それはなんとかです。あなたはまだプリズム4を使用している場合、私は知らないが、もしそうであれば、Microsoftは実際に、このシナリオのためのガイダンスを提供します。あなたが実行している2つのプロジェクトを取得するために行う必要があり、プロジェクトの操作のビットがあり

http://msdn.microsoft.com/en-us/library/ff921109(v=PandP.40).aspx

並んで。実際のサンプルを見る必要がある場合は、「MultiTargeting」と呼ばれるPrism v4に含まれるサンプルがあります。

オーケストレーションのシェル/ブートストラップを使用するのではなく、モジュール自体を初期化することについてのご質問は間違ったアプローチです。基本的には、WPFとSilverlightの2つのシェルになります。サンプルを見て、あなたの考えを見てください。

これが役に立ちます。

関連する問題