8

就像有许多只是基本的应用程序一样,但您可以为其安装插件,从而扩展其在该应用程序中的功能。例如:

Fire Bug in Mozilla Firefox.

他们如何设计这样的应用程序,应用程序如何接受模块以及如何自动集成。

其次,我不知道上述过程是通用的还是依赖于某种语言或工具的。我们可以在 WPF 或 Winforms 中制作这样的应用程序吗?

4

4 回答 4

6

查看MEF

托管可扩展性框架 (MEF) 是 .NET 中的一个新库,可以更好地重用应用程序和组件。使用 MEF,.NET 应用程序可以从静态编译转变为动态组合。如果您正在构建可扩展应用程序、可扩展框架和应用程序扩展,那么 MEF 适合您。

于 2011-03-23T14:37:20.343 回答
2

如果您特别关注 WPF 和 .NET,请查看Mono.Addins。在文档站点上有一个使用 Mono.Addins 的项目列表 - 我相信您可以从那里找到许多关于如何编写加载项就绪应用程序的示例。

就正确的设计而言,要做到这一点有点棘手。如果您遵循 Robert C. Martin 的书《敏捷软件开发、原则、模式和实践》中提到的打包原则,那么您的应用程序设计自然会允许插件。两个特别重要的原则是依赖倒置原则和稳定抽象原则。

于 2011-03-23T14:24:48.897 回答
2

你可能想看看LuaInterface。您可以完全控制文件中运行的内容和方式!

于 2011-03-23T15:31:53.563 回答
2

这实际上取决于您的应用程序设计/布局/界面和使用的语言。

这在 C、C++、C# 和许多其他语言中是可能的,但真正的实现取决于你希望它如何工作:

  • 许多游戏(尤其是 MMORPG)允许用户使用 XML 和脚本文件(例如 Lua)的某种组合来修改和扩展他们的 UI。这是一种更简单、更安全的方法,尤其适用于经验不足的用户(它很可能更容易编辑/更新/使用,您的用户不必了解完整的语言,您可以决定公开的内容)。

  • 其他程序使用插件库文件。整体概念与上面类似,但更难使用(要创建插件/扩展,您必须了解受支持的编程语言)并且您可能会暴露比您想要的更多(例如插件可以修改您没有的程序部分不想让他们碰)。

通用过程总是相似的:

  1. 查找可用的插件文件(xml 文件、lua 文件、xul 文件、zip 文件、dll 文件……您的决定)
  2. 加载和评估文件(例如加载脚本文件、解析 xml 文件或加载 dll)
  3. 运行您的代码或插件文件提供的代码或在这些文件中调用代码等。

正如您在 C# 下标记的那样,我猜您更喜欢 dll/程序集方法。工作解决方案还有其他问题,例如这个

于 2011-03-23T14:18:15.713 回答