gpt4 book ai didi

c# - 为 WPF 应用程序创建加载项

转载 作者:太空狗 更新时间:2023-10-29 23:05:59 25 4
gpt4 key购买 nike

我有一个简单的数据库应用程序,用户可以在其中添加或删除人员。此外,该应用程序有一个按钮“向应用程序添加新按钮”。此应用程序是使用 Prism 框架构建的。有两个模块:

  • RibbonControlModule(包含三个按钮 - Add PersonDelete PersonAdd new button to application)

  • PersonModule(包含增减人员逻辑)

我的要求是在运行时添加新按钮。

让我们想象一种情况。我住在华盛顿,我对这两个按钮(Add PersonDelete Person)很满意。但是我住在新泽西州的 friend Bob 希望添加新按钮 Edit Button 而无需重新编译整个应用程序。也就是说,Bob 在他可以编辑人员的地方编写 dll,然后单击 RibbonControlModule 中的 Add new button to application。之后,EditPerson 按钮出现在 RibbonControl 中,例如 ContextMenu 中。也许 EditPerson dll 会是另一个 Prism 模块,我不知道。

也就是我的要求是:

  • 可插拔控件
  • 是否可以在不重新编译的情况下插入控件? (如浏览器中的附加组件或扩展( Classic Notes for Opera )(无需重新启动浏览器即可使用附加组件))
  • 其他程序员可以在不使用我的源代码的情况下开发他们的插件
  • 一旦用户插入一个控件,这个新控件就应该始终插入到应用程序中。

是否可以使用 WPF、MVVM 和 Prism?我非常喜欢 Prism,也不想否定 Prism,但如果“不择手段”,我愿意使用其他技术。

如果可以,我该怎么做?

最佳答案

这就是MEF plugin architecture专为。

简而言之,您创建一个包含插件接口(interface)的 SDK,并将其作为独立库提供给您的客户。然后,您客户端的插件会实现此接口(interface)并使用 MEF Export 属性导出它们,然后您的主应用程序会导入该属性。

有点棘手的是数据模板,这通常是 MVVM 的关键组件。长话短说,您的插件需要将它们的数据模板放入资源字典中,为该字典提供它自己的部分类文件,并使用 MEF 的 [Export] 属性将其导出。然后您的主应用程序需要导入这些并将它们添加到全局 ResourceDictionary 的“MergedDictionaries”数组中。这通常与在单独的 channel 中导入的所有 View 模型类分开完成。最终效果是您的插件可以在运行时同时提供 View 和 View 模型,以及将两者绑定(bind)在一起的数据模板,并且它们都将像静态编译到您的原始应用程序中一样工作。这也意味着您可以为您的客户创建插件 API,而无需公开主应用程序的内部结构。

这是一个非常复杂的话题,考虑到这个问题的普遍性,如果这个问题没有被标记,我会感到惊讶。如果您想了解更多详细信息,请告诉我,我们可以将其移至讨论页面。

关于c# - 为 WPF 应用程序创建加载项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36789547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com