2

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

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

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

请分享您的想法和经验。

4

3 回答 3

2

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

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

于 2009-01-30T12:53:54.577 回答
1

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

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

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

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

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

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

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