【发布时间】:2011-01-06 18:23:45
【问题描述】:
我想在我的应用程序加载时加载模块,并让它们将视图放入 Shell(主视图)中的 region(另请参阅 this MSDN article)。我目前正在按需加载一个模块,它工作得很好。 (我使用调用this.moduleManager.LoadModule("ModuleB"); 的按钮加载模块,其中moduleManager 定义为[Import(AllowRecomposition = false)] private IModuleManager moduleManager;。这一切都来自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 区域
<TabControl Regions:RegionManager.RegionName="ContentRegion" />
当我更改为在可用时加载模块 ([ModuleExport(typeof(ModuleB), InitializationMode = InitializationMode.WhenAvailable)]),当引导程序创建 Shell 时,我会收到 ModuleInitializeException,说“此 RegionManager 不包含名为 'ContentRegion' 的区域”。这告诉我在 Shell 中创建区域和初始化模块存在时间问题。
所以这是我的问题:如何在发现时将模块的视图注册到 Shell 的区域,而无需使用 OnDemand 初始化和手动加载模块?
【问题讨论】: