21

私が使用しているもの:

  • ビジュアル スタジオ 2010
  • マイクロソフト .NET フレームワーク 4
  • プリズムv4

私が理解しようとしているのは、MVVM パターンを維持しながら Prism + MEF を開始する方法です。Prism Quickstarts にアクセスすると、Prism + MEF が含まれていますが、プロジェクトのコメントには、Quickstart の例では MVVM が実装されていないと具体的に記載されています。シェル自体がMVVM(およびリージョン)に従うように、何を混合/一致させるべきか本当にわかりません。

基本的に、実行時にアセンブリ (モジュール) をロードできるように MEF を使用したいと考えています。そして、シェルにリージョンをセットアップし、シェルに MVVM を使用させたい (シェルにデータバインドできるようにするため)。オンラインのすべての例は、Prism、Prism + MVVM、Prism + Unity、Silverlight の例、Prism + MEF などのいずれかですが、WPF Prism + MEF + MVVM の例や情報は見つかりません。ブートストラップなどをセットアップする方法が本当にわかりません。

その部分が完了したら、MVVM を使用して他のコントロールをシェルにロードする方法を理解できると確信しています。特に、似たようなもの (つまり、Prism + Unity で MEF なし) とは対照的に、この状況に直接対処するリソースがあれば、どんな助けも役に立ちます。ありがとう!

4

2 に答える 2

1

あなたが尋ねたことはすべて、Prism にインストールされているサンプルに含まれているようです。間違ったサンプルを見ただけです。

こちら で説明されているStockTrader RIフォルダーを確認してください。

いくつかの複雑なシナリオを含む実際のアプリケーションのかなり完全なサンプルがあり、Prism (明らかに)、MVVM、および MEF で実装されています。

編集:私が提供したリンクは Prism 5 用ですが、サンプルは Prism 4.1 にもありました。そのバージョンでは、ドキュメンテーションは (少なくとも私が覚えている限りでは) オンラインでは入手できませんでしたが、代わりに、Prism ソース コードとサンプルと共にインストールされた .chm ファイルで提供されていました。ただし、v4.0についてはわかりません。

于 2015-05-18T20:29:54.557 に答える
1

私は Prism+MEF を自分で使用したことはありませんが、質問の中で、実行時に (MEF を使用して) モジュールをロードできるようにしたいと述べています。これは、Prism 自体が非常に優れているため、MEF を使用する必要はありません。セットアップは非常に簡単です。

まず、 を実装して Prism モジュールを作成しますModularity.IModule。必要なメソッドは 1 つだけです: Initialize(). ここで、モジュールに必要な設定を行うことができます。通常、コンストラクターを拡張して、必要になる可能性のある他のインターフェイスを (Unity を使用して) 挿入します。

次に、ModuleCatalog を作成して、作成したモジュールの詳細を指定します。

<Modularity:ModuleCatalog 
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           xmlns:Modularity="clr-namespace:Microsoft.Practices.Prism.Modularity;assembly=Microsoft.Practices.Prism.Composition">
    <Modularity:ModuleInfo Ref="Your.ModuleProject.dll" 
        ModuleType="Your.ModuleProject.Module, Your.ModuleProject" 
        ModuleName="Module1" 
        InitializationMode="OnDemand" />
</Modularity>

実行時のInitializationMode読み込みが必要な場合は、これを設定します。カタログは Prim ブートストラップでロードできます:

catalog = Microsoft.Practices.Prism.Modularity.ModuleCatalog.CreateFromXaml(new Uri("Modules.xaml", UriKind.RelativeOrAbsolute));

次に、モジュールをロードするために必要なことは、IModuleManager(依存性注入、イェイ!) への参照を取得して、モジュールをロードすることだけです。

if (loadModule1)
    var myModule = moduleManager.LoadModule("Module1");

これで、モジュールが Prism に認識されました。アンロードは Prism ではサポートされていないことに注意してください。

于 2015-04-13T07:28:54.893 に答える