アプリが読み込まれたときにモジュールを読み込み、シェル(メインビュー)のregion(this MSDN articleも参照)に表示したいとします。私は現在、オンデマンドでモジュールをロードしており、うまく動作します。 (私はmoduleManager
が[Import(AllowRecomposition = false)] private IModuleManager moduleManager;
のように定義されてthis.moduleManager.LoadModule("ModuleB");
を呼び出すボタンでモジュールをロードこれは、すべてのModularityWithMef.Desktopサンプルアプリケーションから来ている。)ここでは、関連するコードです:利用可能な場合、プリズム領域にモジュールを表示する
モジュール
[ModuleExport(typeof(ModuleB), InitializationMode = InitializationMode.OnDemand)]
public class ModuleB : IModule
{
[Import(AllowRecomposition = false)] private IRegionManager _regionManager;
/// <summary>
/// Initializes a new instance of the <see cref="ModuleB"/> class.
/// </summary>
public ModuleB()
{
}
/// <summary>
/// Notifies the module that it has be initialized.
/// </summary>
public void Initialize()
{
_regionManager.AddToRegion("ContentRegion", new ModuleBView());
}
}
XAML領域が
利用可能なモジュールを読み込むように変更すると[ModuleExport(typeof(ModuleB), InitializationMode = InitializationMode.WhenAvailable)]
)、ブートストラップがShellを作成しているときに "This RegionManagerに 'ContentRegion'という名前のリージョンが含まれていないとModuleInitializeExceptionが発生します。これは、シェル内の領域の作成とモジュールの初期化にタイミングの問題があることを示しています。 OnDemand初期化を使用せずに手動でモジュールをロードする必要がなく、モジュールのビューをシェルの領域に登録するにはどうすればよいですか?
投稿していただきありがとうございます。 :) – VipX1