Plugins 插件依赖性最佳实践

Plugins 插件依赖性最佳实践,plugins,dependencies,Plugins,Dependencies,我们有一个通过接口支持插件的应用程序。另一方面,插件本身包含大量的逻辑和代码。除了应用程序公开的接口之外,插件还依赖于应用程序库(项目和dll引用) 应用程序核心库有许多可重用的组件,可以在插件中使用。但如果这些组件中的任何一个发生了变化,插件和应用程序都会受到影响,因为它们都有依赖关系 可以接受插件在系统上包含依赖项,插件可以扩展吗?在这个问题上的最佳做法是什么 请分享您的想法和经验。我认为让您的插件引用您的核心是完全好的。现在你要讨论的是项目和DLL引用,所以你必须使用C++、VB或C++,

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

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

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


请分享您的想法和经验。

我认为让您的插件引用您的核心是完全好的。现在你要讨论的是项目和DLL引用,所以你必须使用C++、VB或C++,这些解决方案都应该是很好的使用。p> 我通常有两个项目,以绕过循环依赖关系

  • 项目基础、接口、异常
  • 逻辑/配置/插件加载程序
  • 我通常有三种加载插件的方法

  • 使用循环和文件系统监视程序从目录中退出(速度慢但有效)
  • 使用命名类型在.net中使用您自己的配置部分(推荐且最快)
  • 从数据库加载它们(有利于可伸缩性)
  • 看一看a,即使你不是在用C#开发,它也会给你一些好主意


    简单的解决方案是为插件和内核定义一个版本系统,这样内核就可以读取插件需要的版本。这种方法很容易防止加载一个插件,该插件本打算与旧版本的内核一起使用

    我认为你的问题有两个答案,这取决于我们讨论的级别:

    • 是的,插件在插件主机上有依赖关系是可以的。主机正在协调插件的使用/执行,但主机没有理由不提供功能来帮助插件做到这一点。再进一步说,主机的依赖关系对于插件的使用可能是公平的,也可能不是公平的(这就进入了“它依赖…”的领域)
    • 不,插件不应该直接依赖于主机可以提供的代码,插件直接传入的对象除外。这与其说是对循环依赖的恐惧,不如说是对全球国家的不信任