2011-02-09 12 views
21

私が使用している何を:私は把握しようとしています何PRISM + MEF + MVVM - どこから始めるべきかわからないのですか?

  • のVisual Studio 2010
  • のMicrosoft .NET Framework 4
  • プリズムV4

は、プリズムを始める方法ですMVVMパターンを維持しながら+ 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なし)。ありがとう!

+0

MEF + Prism + MVVMの例をお探しですか?私はどちらも見つけることができず、例は1000のヘルプファイルリンクの価値がある。 – JohnC

+0

@JohnC:Prismの開発者ガイドは役に立ちましたが、いいえ、Prism + MEF + MVVMの具体的な例は見つかりませんでした。しかし、個々のコンポーネントをそれぞれ見ていると意味がありました。 Prismは、MVVMアプリケーションの作成に役立つユーティリティとクラスを提供するフレームワークです。 MEFはプラグインフレームワークです。プリズムとMEFが絡み合う理由は、プリズムが拡張可能であるためです。私はリージョン(MEFを使用して)を扱う方法を理解していませんが、AggregateCatalogはPrism + MEFの心と魂です。 – michael

+0

@ JohnC:MVVMはデザインスタイルで、Prismと自然につながります。これは、Prismが特別なMVVMの状況を処理するのに役立つツールをいくつか提供していることです(たとえば、DelagateCommandを提供し、CompositeCommandの作成方法に関するサンプルがあります)。それは地域(私はまだ完全には分かっていない)を提供する。それは、NotificationObjectなどのクラスを提供します。MEFを使用してViewModelをビューにインポートし、ビューをMyBootstrapperにエクスポートする方法を見つけました。そこにはかなりの数のソースがあります。ちょうど1つの大きな例ではなく、一緒につなげた小さな例がたくさんあります。 – michael

答えて

1

私は自分自身でPrism + MEFを使用したことはありませんが、実行時に(MEFを使用して)モジュールをロードできるようにしたいと言います。これは、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はあなたがランタイムのロードが必要な場合は、設定したいものです。 (!イェーイ、依存性注入)

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

は、その後、あなたのモジュールをロードするために必要なすべては、IModuleManagerへの参照を取得し、モジュールをロードします:カタログはプリムブートストラップにロードすることができ

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

このモジュールはPrismに知られています。 Prismではアンロードがサポートされていないことに注意してください。

1

Prismと一緒にインストールされたサンプルには、あなたが聞いたことはすべて間違っているように見えます。

described hereのフォルダStockTraderを参照してください。

複雑なシナリオのいくつかを備えた、実用的なアプリケーション用のサンプルがかなりあり、Prism(明らかに)、MVVMとMEFで実装されています。

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

関連する問題