插件依赖性最佳实践

时间:2009-01-30 12:18:29

标签: plugins dependencies

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

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

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

请分享您的想法和经验。

3 个答案:

答案 0 :(得分:2)

看一下Mono.Addins,即使你没有用C#开发,它也会给你一些好主意。

简单的解决方案是为插件和核心定义版本系统,因此核心可以读取插件所需的自身版本。这种方式很容易防止插件的负载,该插件意味着与先前版本的核心一起使用。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我认为让你的插件引用你的核心是完全没问题的。现在你谈论的是项目和dll引用,所以你必须使用c#,vb或c ++,这些解决方案都可以使用。

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

  1. 项目基础,接口,例外
  2. 逻辑/配置/插件加载器
  3. 我通常有三种方式加载插件

    1. 使用循环和文件系统观察器(缓慢但有效)的目录之外
    2. 使用命名类型(推荐且最快)<。li>在.net中使用您自己的配置部分
    3. 从数据库加载它们(适用于可伸缩性)