0

私はPrism v2 のガイドラインを読んでいます。

初期化中、モジュールは RegionManager を使用してシェル内の領域を特定し、それらの領域に 1 つ以上のビューを追加するか、それらの領域内に作成される1 つ以上のビュー タイプを登録します。

GetModuleCatalog() メソッドなどのブートストラップにビューが追加されることを理解しています。

protected override IModuleCatalog GetModuleCatalog()
{
    ModuleCatalog catalog = new ModuleCatalog()
        .AddModule(typeof(HelloWorldModule.HelloWorldModule));
    return catalog;
}

しかし、ビュー タイプを登録するとはどういう意味でしょうか。上記のコードのように、モジュールが既に「ビューを追加」している場合、モジュールはシェルに「ビュータイプを登録」する必要があるのはなぜですか?

4

4 に答える 4

5

コードでは、ビューをブートストラップに追加するのではなく、モジュールを ModuleCatalog に追加します。CAB/Prism/Composite UI ワールドのモジュールにはビューを含めることができますが、多くの場合、他のモジュールが使用できる何らかのアドオン サービスを提供します。たとえば、たまたまドッキング マネージャーを使用してビューを表示するシェルがあるとします。モジュールで API IDockingWindowService を使用してウィンドウを表示/非表示にしたい。サービスの実装を簡単に交換できるようにしたいので、DockingWindowService というサービスを含み、IDockingWindowService を実装するモジュールを作成します。このモジュールを ModuleCatalog に登録します。

複合フレームワーク ワークフローはこのサービスを作成し、それをブートストラップに登録し、この事実の後に読み込まれたモジュールは IDockingWindowService を使用できるようになります。このサービスはビューではなくロジックです。その違いを指摘したかっただけです。そうは言っても、モジュールには 0 個以上のビュー (または簡略化してユーザー コントロール) を含めることができます。UI の単位は View です。モジュールは、ロジックや UI バンドルの概念に近いものです。

特定の質問に戻ります。ドキュメントが言っていることは、リージョンを使用してビューを表示する場合、ビュー タイプをリージョンに登録できるということです。リージョンが表示されるたびに、Unity コンテナを使用してビューが自動的に構築されます。

于 2009-03-05T14:28:43.807 に答える
2

タイプをリージョンに登録すると、リージョンが表示されるたびにそのタイプがインスタンス化されます。

リージョンを見つけてビューを追加する場合は、リージョンマネージャーに任せるのではなく、作業を行うため、そのビューにタイプを登録する必要はありません。

于 2009-03-05T13:40:37.230 に答える
0

上記のコードでは、モジュール カタログに記入しています。これは、モジュール性が Prism でどのように機能するかの一部です。ここで説明するスクリーンキャストがあります。基本的に、Prism に .dll または .xap ファイルをロードするように指示します。これらの「モジュール」には、サービス (インターフェースの実装と考えてください) とビューの 2 つを含めることができます。

モジュール (通常は .dll または .xap ファイル) が読み込まれると、サービスとリージョンを登録できる Initialize メソッドが呼び出されます。

public class ModuleA : IModule
{
    IRegionManager _regionManager;
    IUnityContainer _container;

    public ModuleA(IRegionManager regionManager, IUnityContainer container)
    {
        _regionManager = regionManager;
        _container = container;
    }

    #region IModule Members

    public void Initialize()
    {
        _container.RegisterType<ICompanyService, CompanyService>();
        _regionManager.RegisterViewWithRegion("MainRegion", typeof(ModuleAView));

    }

    #endregion
}

ビューの登録に注意してください。

_regionManager.RegisterViewWithRegion("MainRegion", typeof(ModuleAView));

ここで Initialize に任意の数のビューを登録できます。また、任意のモジュールの初期化 (これも通常は .xap または .dll) で行われます。

于 2009-06-07T14:38:47.107 に答える
0

あなたの例では、モジュールをアプリケーションモジュールに追加しています。これは、IModuleインターフェースを実装するクラス(モジュール初期化クラス)を使用したライブラリのロードと考えています

そのモジュール初期化クラスの Intialize メソッドが呼び出されるたびに、モジュールはそれ自身の IoC マッピングと、モジュールの作業に必要なその他のものを登録します。

モジュールは、モジュールの初期化中にビューをロードできるようになりました (メニュー項目やツールバー項目の追加など)。それはあなたの質問の「モジュールの初期化中に1つ以上のビューを追加する」部分をカバーします。

初期化中にビューを表示する以外に、モジュールには通常、モジュールのロード時に表示されないビューが含まれていますが、通常は何らかのイベントに反応して表示されます (UserLoogingIn イベントでは、ログイン ビューの表示が必要になる場合があります)。Prism がそのビューを表示するには、ビューとプレゼンテーション モデル間のすべてのマッピングが、モジュール初期化子で既に定義されている必要があります。

このようなもの(RIコードスタイルに基づく)

this.container.Register(); this.container.Register();

そのため、モジュール初期化子は、ビューをロードする領域マネージャー操作中にビューを解決するためにユニティに必要なマッピングを定義することにより、ビューを登録します。

于 2009-04-26T08:01:33.350 に答える