【问题标题】:Designing Application that can accept add ins设计可以接受插件的应用程序
【发布时间】:2011-07-21 08:36:30
【问题描述】:

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

Fire Bug in Mozilla Firefox.

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

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

【问题讨论】:

    标签: c# uicomponents


    【解决方案1】:

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

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

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

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

    通用过程总是相似的:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • “你的应用程序的设计自然会允许插件”这句话看起来不像鲍勃叔叔会说的话。创建插件架构需要非常具体的规划和执行
      • 可以肯定的是,我从未听过鲍勃叔叔说过。但我所指的是我从使用 SOLID 和包装原则的经验中发现的。特别是,当我们尝试迁移到基于插件的系统时,我们没有遵循这些原则的领域是我们在实施插件时遇到痛苦的领域。
      • 我认为您应该将该评论移至您的答案中,因为我同意那里的前提更清楚。如果您不遵循 SOLID 设计,您将很难实现任何类型的插件架构。
      【解决方案3】:

      查看MEF

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-16
          • 1970-01-01
          • 1970-01-01
          • 2011-06-09
          • 1970-01-01
          • 2011-08-24
          相关资源
          最近更新 更多