根据使用 MEF 和 PRISM 在 WPF 中创建复合模块化 UI 应用程序一文的指导,我正在构建一个小型、简单的(目前)模块化应用程序。到目前为止,我有一个主窗口,有两个区域、一个Bootstrapper
类和两个模块项目 ModuleA 和 ModuleC,它们只导出自己。UserControl
他们还各自在主窗口的一个区域中放置一个视图(a ),例如:
[ModuleExport(typeof(ModuleC))]
public class ModuleC: IModule
{
public void Initialize()
{
IRegionManager regionManager = (IRegionManager)ServiceLocator.Current.GetInstance(typeof(IRegionManager));
regionManager.Regions["Region2"].Add(new MoneyUserControl());
}
}
我的愿景是在 中拥有一个大的 UI 区域,MainWindow
供当前正在使用的高级应用程序功能使用,并且该功能是一个导入的模块。虽然这些模块有很多共同点,并且目前是单体应用程序的一部分,但我一直在努力争取基本上只是一个MainWindow
提供基本服务的框架(),而应用程序的每个功能都作为一个模块导入。
我希望活动模块向主窗口提供菜单项(命令)。我很容易“手动”执行此操作,例如使用IModuleWithMenu
界面,并让主窗口查询并集成菜单,或主窗口上的“IMenuHost”界面,并让模块将其菜单命令推入.
但是,我不禁认为必须有更好的方法,因为我已经在使用 MEF,并且有已加载模块的导出和导入目录。当然,我可以查询导出并过滤那些命令,并将它们连接到菜单或其他形式的命令调用,但 MEF 不提供类似的东西已经制作或关闭,我将自己的代码保持在一个最低限度,因此存在错误的风险。
顺便说一句,额外的问题:是否有人拥有关于使用 MEF 构建复合应用程序的真正优秀教程的副本或链接(主要在 WPF 中,但我可以为 WPF 调整其他人),因为它应该这样做。我完成的这篇文章只是对模块、目录和 MEF 本身的一个小介绍。我想要一些非常非常技术性和深度的东西。买书甚至可能是有序的。