我有一个简单的数据库应用程序,用户可以在其中添加或删除人员。此外,应用程序具有按钮“向应用程序添加新按钮”。此应用程序是使用Prism框架构建的。有两个模块:
RibbonControlModule(包含三个按钮- ,Add Person,)Delete PersonAdd new button to application
PersonModule(包含添加和删除人员的逻辑)
我的要求是在运行时添加新按钮。
让我们想象一种情况。我住在华盛顿,对这两个按钮(Add Person和Delete Person)感到很满意。但是我的朋友鲍勃(Bob)居住在新泽西州,他想添加新按钮Edit Button而不重新编译整个应用程序。也就是说,鲍勃写的DLL,在那里他可以编辑的人,然后点击Add new button to application在RibbonControlModule。之后,EditPerson按钮出现在中RibbonControl,例如ContextMenu。也许EditPersonDLL将是另一个棱镜模块,我不知道。
也就是说,我的要求是:
是否可以使用WPF,MVVM和Prism?我真的很喜欢Prism,并且不想否认Prism,但是如果“最终证明手段合理”,我想使用其他技术。
如果有可能,那我该怎么办?
这就是MEF 插件架构的设计目的。
简而言之,您创建一个包含插件接口的 SDK,并将其作为独立库提供给您的客户。然后,您的客户端插件实现此接口并使用 MEFExport属性导出它们,然后您的主应用程序导入该属性。
有点棘手的是数据模板,它通常是 MVVM 的关键组件。长话短说,您的插件需要将其数据模板放入资源字典中,为该字典提供自己的部分类文件,并使用 MEF 的[Export]属性将其导出。然后,您的主应用程序需要导入这些并将它们添加到全局 ResourceDictionary 的“MergedDictionaries”数组中。这通常是与在单独的传递中导入的所有视图模型类分开完成的。最终效果是,您的插件可以在运行时提供视图和视图模型,以及将两者绑定在一起的数据模板,并且所有这些都将像静态编译到原始应用程序中一样工作。这还意味着您可以为客户创建插件 API,而无需暴露主应用程序的内部结构。
这是一个非常复杂的话题,考虑到这个问题的普遍性,如果这个问题没有被标记,我会感到惊讶。如果您想了解更多详细信息,请告诉我,我们可以将其移至讨论页面。
| 归档时间: |
|
| 查看次数: |
695 次 |
| 最近记录: |