设计可以接受添加项的应用程序

时间:2011-03-23 14:07:01

标签: c# uicomponents

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

Fire Bug in Mozilla Firefox.

他们如何设计此类应用程序以及应用程序如何接受模块以及如何自动集成。

其次,我不知道上述过程是通用的还是依赖某种语言或工具。我们可以在WPF或Winforms中进行此类应用吗?

4 个答案:

答案 0 :(得分:6)

查看MEF

  

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

答案 1 :(得分:2)

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

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

  • 许多游戏(尤其是MMORPG)允许用户使用XML和脚本文件(例如Lua)的某种组合来修改和扩展其UI。这是一种更简单,更安全的方法,尤其适用于缺乏经验的用户(最有可能更容易编辑/更新/使用,您的用户无需了解完整的语言,而且您决定要公开的内容)。

    < / LI>
  • 其他程序使用库文件作为插件。总体概念与上面类似,但它更难使用(创建插件/扩展,你必须知道一个支持的编程语言),你可能会暴露超出你想要的(例如插件可以修改你没有的程序的一部分)不希望他们碰到。)

通用流程始终类似:

  1. 查找可用的插件文件(xml文件,lua文件,xul文件,zip文件,dll文件,......你的决定)
  2. 加载并评估文件(例如加载脚本文件,解析xml文件或加载dll)
  3. 运行您的代码或插件文件提供的代码或调用这些文件中的代码等。
  4. 正如您在C#下标记的那样,我猜你更喜欢dll / assembly方法。工作解决方案还有其他问题,例如: this one

答案 2 :(得分:2)

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

就正确的设计而言,要做到这一点有点棘手。如果您遵循Robert C. Martin的书Agile Software Development, Principles, Patterns and Practices中提到的包装原则,您的应用程序的设计自然会允许添加。两个特别重要的原则是依赖性倒置原则和稳定的抽象原则。

答案 3 :(得分:2)

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