【问题标题】:Plugin dependency best practices [closed]插件依赖最佳实践 [关闭]
【发布时间】:2010-10-04 11:10:16
【问题描述】:

我们有一个通过接口支持插件的应用程序。另一方面,插件本身包含大量逻辑和代码。除了应用程序公开的接口外,插件对应用程序库具有依赖项(项目和 dll 引用)。

应用程序核心库有许多可在插件中使用的可重用组件。但是,如果这些组件中的任何一个发生了变化,插件和应用程序都会受到影响,因为两者都有依赖关系。

是否可以接受包含对系统的依赖项的插件,插件扩展?关于这个问题的最佳做法是什么?

请分享您的想法和经验。

【问题讨论】:

    标签: plugins dependencies


    【解决方案1】:

    我认为您的问题有两个答案,具体取决于我们所讨论的级别:

    • 是的,插件主机上的插件依赖关系很好。主机正在协调插件的使用/执行,但主机没有理由不提供帮助插件执行此操作的功能。进一步扩展一点,主机的依赖关系对于插件使用可能是公平的,也可能不是(这进入了“它依赖...”的领域)。
    • 不,插件不应该直接依赖于主机可以提供的代码,除了那些插件直接传入的对象。这更像是对全局状态的不信任,而不是对循环依赖的恐惧。

    【讨论】:

      【解决方案2】:

      看看Mono.Addins,即使你不是用C#开发,它也会给你一些很棒的想法。

      简单的解决方案是为插件和核心定义一个版本系统,这样核心就可以读取插件需要的自身版本。这种方式很容易防止插件的加载,该插件旨在与先前版本的核心一起使用。

      【讨论】:

        【解决方案3】:

        我认为让你的插件引用你的核心是完全可以的。现在您正在谈论项目和 dll 引用,因此您必须使用 c#、vb 或 c++,这些解决方案都应该可以使用。

        我通常有两个项目来绕过循环依赖。

        1. 项目基础、接口、异常
        2. 逻辑/配置/插件加载器

        我通常加载插件的三种方式

        1. 使用循环和文件系统观察程序退出目录(缓慢但有效)
        2. 使用命名类型在 .net 中使用您自己的配置部分(推荐且最快)
        3. 从数据库加载它们(有利于可扩展性)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-08-24
          • 1970-01-01
          • 2011-06-11
          • 2010-12-11
          • 2012-10-09
          • 2015-07-29
          • 2011-10-15
          相关资源
          最近更新 更多