【发布时间】:2016-08-15 19:58:18
【问题描述】:
我有一个简单的数据库应用程序,用户可以在其中添加或删除人员。此外,该应用程序有一个按钮“向应用程序添加新按钮”。这个应用程序是使用Prism 框架构建的。有两个模块:
RibbonControlModule(包含三个按钮 -
Add Person、Delete Person、Add new button to application)PersonModule(包含添加和删除人员的逻辑)
我的要求是在运行时添加新按钮。
让我们想象一个情况。我住在华盛顿,我对这两个按钮很满意(Add Person 和 Delete Person)。但是我住在新泽西州的朋友 Bob 想在不重新编译整个应用程序的情况下添加新按钮 Edit Button。也就是说,Bob 在他可以编辑 person 的地方写入 dll,然后在 RibbonControlModule 中单击 Add new button to application。之后,EditPerson 按钮出现在RibbonControl 中,例如,在ContextMenu 中。也许EditPerson dll 会是另一个 Prism 模块,我不知道。
也就是说,我的要求是:
- 可插拔控件
- 是否可以在不重新编译的情况下插入控件? (如浏览器中的插件或扩展(Classic Notes for Opera)(无需重新启动浏览器即可使用插件))
- 其他程序员可以在不使用我的源代码的情况下开发他们的插件
- 一旦用户插入一个控件,那么这个新控件应该始终插入到应用程序中。
是否可以使用 WPF、MVVM 和 Prism?我真的很喜欢 Prism,也不想否定 Prism,但如果“目的是正当的”,我想使用其他技术。
如果可以,那我该怎么做呢?
【问题讨论】:
-
另一种选择是插件公开按钮表示的实现,由您在界面中定义。在编写界面时,您将知道如何将其与 UI 绑定。将实现放入 ContentControl 并使用 DataTemplate 设置控件,无论是按钮还是下拉菜单或任何东西。
-
@你能提供一些链接看看吗?
-
请注意,如果您不想使用它们,通常不需要 MEF 或任何其他框架。您只需定义插件开发人员实现的一些接口(IModule),然后扫描程序集以查找此接口的实现,然后实例化并运行。当然,您必须在整个应用程序中定义扩展点,但无论如何您都必须对任何框架执行此操作。
-
@Evk 你能提供一些链接看看吗?
-
不幸的是没有链接,只是自己的经验。我也第一次使用 MEF,对于大多数事情来说它都很好,我想你也应该尝试一下。您刚刚问过“是否可以使用 WPF、MVVM 和 Prism”,我的意思是,是的,这当然是可能的。