设计可以接受插件的应用程序

8

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

Fire Bug in Mozilla Firefox.
他们如何设计这样的应用程序,应用程序如何接受模块以及如何自动集成。其次,我不知道上述过程是通用的还是与某种语言或工具相关的。我们能否在WPF或Winforms中创建这样的应用程序?
4个回答

6

请查看MEF

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


2

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

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

  • 许多游戏(特别是MMORPG)允许用户使用一些组合的XML和脚本文件(例如Lua)修改和扩展其UI。这是更容易且更安全的方法,特别适用于经验不足的用户(更容易编辑/更新/使用,您的用户不必理解完整的语言,您决定公开什么)。

  • 其他程序使用库文件进行插件。总体概念与上述类似,但使用起来更困难(要创建插件/扩展,您必须了解支持的编程语言),并且可能会公开比您想要的更多的内容(例如,插件可以修改您不想让它们接触的程序部分)。

通用过程始终类似:

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

由于您在C#下进行了标记,我猜您更喜欢dll/程序集方法。有其他问题具有工作解决方案,例如这个


2
如果你专注于WPF和.NET,可以查看Mono.Addins。文档网站上有使用Mono.Addins的项目列表 - 我相信你可以从中找到许多编写插件就绪应用程序的示例。
至于正确的设计,这有点棘手。如果你遵循罗伯特·C·马丁的书中提到的打包原则,敏捷软件开发,原则、模式和实践,你的应用程序设计自然会允许插件。两个特别重要的原则是依赖反转原则和稳定抽象原则。

2
你的应用设计自然会允许插件,这句话似乎不像是Bob大叔会说的。创建插件架构需要非常具体的规划和执行,我无法想象你的应用程序会“自然允许”它。 - Chris Marisic
可以肯定的是,我从未听过 Uncle Bob 这样说过。但是我所指的是根据我在实践 SOLID 和打包原则时的经验所发现的情况。特别是当我们尝试转向基于插件的系统时,那些没有遵循这些原则的领域就是我们在实现插件方面遇到困难的地方。 - Sir Rippov the Maple
我认为你应该把那个评论移到你的答案中,因为我同意那个前提更清晰。如果你不遵循SOLID设计原则,实现任何类型的插件架构都会非常困难。 - Chris Marisic

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接