ホーム > コンピュータ > C# > WPF in C# > Prism

ベクトルドロー・レベルゼロ+

Prism Library 5.0 for WPFを使用したモジュール・アプリケーション開発 04[C# WPF Prism]

概要

MVVMパターン調べていて、Prismというツールキットを見つけました。MVVMパターンを使用するためのもっとも人気のあるツールキットのようです。

原文

Modular Application Development Using Prism Library 5.0 for WPF」(外部サイト)の和訳です。

訳文

Modular Application Development Using Prism Library 5.0 for WPF(外部サイト)

パターンと実践 ディベロパー・センター

Microsoft Prism Library 5.0 for WPFの開発者のガイドから:

MEFのモジュール

Modules in MEF

この項目は、あなたが、依存関係注入コンテナとして、MEFを使用することを選択する場合、 違いをただ強調します。

備考

MEFを使用するとき、MefModuleManagerは、MefBootstrapperによって使用されます。新しい型が、MEFでインポートされるとき、 ModuleCatalogが更新されることを確実とするために、ModuleManagerを拡張し、IPartImportsSatisfiedNotificationインターフェースを実装します。

MEFを使用して、コード内のモジュールを登録する

Registering Modules in Code Using MEF

MEFを使用するとき、あなたは、ModuleExport属性を、MEFに、自動的に型を発見させるために、モジュール・クラスに適用することができます。以下は一例です。


[ModuleExport(typeof(ModuleB), InitializationMode = InitializationMode.OnDemand)]
 public class ModuleB : IModule
{
    ...
}

また、あなたは、AssemblyCatalogクラスを使用して、MEFを発見するために、モジュールを読み込むために、 使用することができます。それは、アセンブリ内の、すべてのエクスポートされたモジュール・クラスを発見するために、使用し続けることができます。 そして、AggregateCatalogクラスは、複数のカタログを1つの論理的カタログに結合することができます。 既定では、PrismのMefBootstrapperクラスは、AggregateCatalogインスタンスを作成します。 次のコードの例に示すように、あなたは、続いて、アセンブリを登録するために、 ConfigureAggregateCatalogメソッドを上書きすることができます。


protected override void ConfigureAggregateCatalog()
{
    base.ConfigureAggregateCatalog();
    // Module A is referenced in in the project and directly in code.
    // モジュールAは、コードの中で、プロジェクトとディレクトリで、参照されます。
    this.AggregateCatalog.Catalogs.Add(
    new AssemblyCatalog(typeof(ModuleA).Assembly));

    this.AggregateCatalog.Catalogs.Add(
        new AssemblyCatalog(typeof(ModuleC).Assembly));
    . . . 
}

PrismのMefModuleManagerの実装は、MEFのAggregateCatalogとPrismのModuleCatalogの同期を維持します。 それによって、Prismは、ModuleCatalogやAggregateCatalogを通して、追加されるモジュールを発見することができます。

備考

MEFは、Valueプロパティが使用されるまで、エクスポートされた、 そして、インポートされた型のインスタンス生成を防ぐために、広範囲にわたり、Lazyを使用します。

MEFを使用しているディレクトリでモジュールを発見する

Discovering Modules in a Directory Using MEF

MEFは、DirectoryCatalogを提供します。 それは、モジュールが含まれているアセンブリのためのディレクトリを調べるために使用することができます。 (そして、他のMEFは、型をエクスポートしました)。 この場合、あなたは、ディレクトリを登録するために、ConfigureAggregateCatalogメソッドを上書きします。 このアプローチは、WPFでのみ、利用できます。

この方法を使用するために、あなたは、最初に、ModuleExport属性を使用している、 あなたのモジュールに、モジュール名と依存関係を適用する必要があります。 次のコードの例に示すように、これは、MEFが、モジュールをインポートできます。そして、Prismが、 更新されたModuleCatalogを維持することができます。


protected override void ConfigureAggregateCatalog()
{
    base.ConfigureAggregateCatalog();
    . . . 

    DirectoryCatalog catalog = new DirectoryCatalog("DirectoryModules");
    this.AggregateCatalog.Catalogs.Add(catalog);
}

MEFを使用するコード内の依存関係を指定する

Specifying Dependencies in Code Using MEF

MEFを使用するWPFアプリケーションのために、ここで示されるように、ModuleExport属性を使用します。


// (when using MEF)
[ModuleExport(typeof(ModuleA), DependsOnModuleNames = new string[] { "ModuleD" })]
public class ModuleA : IModule
{
    ...
}

MEFは、実行時に、モジュールを発見することができるため、 また、あなたは、実行時に、モジュールの間で新しい依存関係を発見するかもしれません。 あなたは、ModuleCatalogと一緒にMEFを使うことができますが、それが、XAMLや設定から読み込まれるとき、 そのModuleCatalogは、依存関係チェーンを検証することを覚えておくことは重要です。 (どんなモジュールでも読み込まれる前に)。モジュールが、ModuleCatalog内で一覧を示され、 続いて、MEFを使用して読み込まれる場合、ModuleCatalog依存関係は使用されるでしょう。 そして、DependsOnModuleNames属性は無視されるでしょう。

MEFを使用して、要求に応じて読み込みを指定する

Specifying On-Demand Loading Using MEF

あなたが、モジュールとモジュール依存関係を指定するための、MEFとModuleExport属性を使用している場合、 ここに、示されるように、あなたは、指定するために、モジュールは、要請に応じて読み込まれる必要がある、 InitializationModeプロパティを使用することができます。:


[ModuleExport(typeof(ModuleC), InitializationMode = InitializationMode.OnDemand)]
public class ModuleC : IModule
{
}

詳細情報

More Information

あるいは、アセンブリキャッシュの詳細については、「どのように:MSDNの上でAssembly Library Cachingを使用します(原文リンク)」を参照してください。

Prismのモジュラー性をさらに知るためには、WPFのクイックスタートのための、モジュラー性とMEF、あるいは、WPFのクイックスタートのための、 モジュラー性とUnityを参照してください。クイックスタートの詳細については、 モジュールのクイックスタート(原文リンク) を参照してください。

モジュール機能に関する情報は、Prismライブラリで拡張することができます。 モジュール(原文リンク)については、 Prismライブラリを拡張する(原文リンク)を参照してください。

Copyright (C) 2011-2016 kukekko All Rights Reserved.
kukekko@gmail.com
ご連絡の際はアドレスの@は半角にしてください。 また、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません 」。
inserted by FC2 system