【问题标题】:Building An App With Plug-in Support构建具有插件支持的应用程序
【发布时间】:2010-07-15 17:46:22
【问题描述】:

我正在开始一个新项目,该项目将从程序插件中受益匪浅。该程序以最基本的形式从串行端口读取数据并将其解析为数据库记录。可以编写的附加组件示例是自动存档附加组件、过滤记录的附加组件等。我正在编写程序和附加组件,但有些客户需要自定义解决方案,所以而不是分支并制作一个完全独立的程序,附加组件会很棒。最简单的附加组件可能是一个表单,它的构造函数获取对象引用,以某种方式操作对象,然后关闭。

不幸的是,我完全不知道从哪里开始编码,也几乎不知道从哪里搜索。我搜索的所有内容都会出现浏览器附加组件。根据我收集到的,我需要研究动态加载 DLL。除此之外,我一无所知。有没有人知道他们知道的任何好的资源或示例?

我很乐意提供更多细节,但这个项目才刚刚开始,所以我没有很多具体细节(细节也有损于附加组件的意义。)

【问题讨论】:

    标签: c# .net plugins


    【解决方案1】:

    您应该认真考虑使用Managed Extensibility Framework (MEF) 来处理您的插件架构。它需要以不同的方式思考问题,但值得花点心思。

    【讨论】:

    • +1。我来这里是为了拉皮条,发现它已经拉皮条了。好拉皮条,先生!
    • MEF 非常棒!这正是我一直在寻找的。我将不得不再搞砸一些,但我已经有了一个简单的表单,它允许您向其中添加按钮。太棒了!
    • 另一个替代方案是 Mono.Addins (monoaddins.codeplex.com),它除了对类和接口可扩展性的基本支持外,还提供了一些不错的特性,例如数据扩展、加载项依赖项和工具用于管理加载项存储库。
    【解决方案2】:

    这是一个简单的例子来说明基本技术。

    codeproject.com - Plugin Architecture using C#

    本文向您展示了如何 将 ... 纳入 另一个应用程序或使用的插件 它作为一个独立的应用程序。

    在 .NET 4 中,您现在可以使用 Managed Extensibility Framework (MEF) 来完成大部分工作。

    在 .NET 3.5 中,您拥有 System.AddIn,但许多人认为它过于复杂。

    codeproject.com - AddIn Enabled Applications with System.AddIn

    插件(有时称为插件)是 单独编译的组件 应用程序可以定位、加载和制作 在运行时(动态)使用。一个 已被设计为应用程序 使用 AddIns 可以增强(通过 开发更多的插件)没有 需要原始申请 修改或重新编译测试

    【讨论】:

      【解决方案3】:

      你真的需要看看Managed Extensibility Framework (MEF)。这是专门为帮助支持附加组件和其他可扩展性而设计的。

      【讨论】:

      • 我不知道是你还是 @dthorpe 先发帖,但还是要 +1!
      • 厄运!我们几乎同时发布。 (在 10 秒内)
      • @dthorpe - 现在我欠你一杯可乐! (那是我们的“Jinx”的区域变体)
      • 成交!我会为你创建一个标签。 :P(比不得不屏住呼吸直到有人说出你的名字要好得多)
      【解决方案4】:

      一个非常基本的描述(基本上,你的插件必须实现一个特殊的接口):

      http://martinfowler.com/eaaCatalog/plugin.html

      更好的文章,用 C# 编写:

      http://www.drdobbs.com/184403942;jsessionid=TVLM2PGYFZZB1QE1GHPCKHWATMY32JVN

      【讨论】:

        【解决方案5】:

        我认为Reflection 将发挥重要作用。

        我试用了一个具有插件文件夹的应用程序。文件系统观察者会观察文件夹,当一个新的 DLL 被放入其中时,它会使用反射来确定它包含哪些类型的插件,加载它们,并将它们添加到可用类列表中,等等。

        【讨论】:

          【解决方案6】:

          尝试在您的研究中使用术语“插件”或“插件”,而不是“插件”。这应该会有所帮助。

          如果您使用的是 .Net 4,框架中有一个加载项命名空间,可以帮助您顺利实现。

          为应用程序编写插件支持并非易事。您必须在您的界面中保持相当严格的关注点分离,您需要提供一个定义所有受支持插件类型的互操作库,并且您需要除了先前建议的反射研究之外,还对依赖注入和控制反转进行一些研究。

          听起来你可能有一个忙碌的周末做研究。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-04-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-23
            • 2014-06-06
            相关资源
            最近更新 更多