【发布时间】:2013-03-15 23:11:09
【问题描述】:
我目前正在开发一个将使用插件类型系统的 C# 产品。这不是什么新鲜事,我已经看到很多关于如何使用接口来轻松实现此功能的信息。
我还看到了通过更新接口名称来实现向后兼容性的方法,例如:Interface change between versions - how to manage?
关于主 exe 和插件之间的版本不匹配,我可以预见到我们的产品有多种情况。
- 主程序插件版本与插件相同
- 主程序比插件更新
- 主程序早于插件
根据我收集到的信息,1 和 2 工作得很好。但是我一直无法弄清楚如何正确地实现“前向”兼容性(3)。
我们只打算向插件 API 添加方法。
任何想法都会有很大帮助。
【问题讨论】:
-
“接口”绝对是要走的路。用户可编辑的文本文件也很有帮助,尽管它可能有点矫枉过正/可能超出了您的项目范围。这是一个不错的简单示例:codeproject.com/Articles/6334/Plug-ins-in-C
-
您在共享 dll 中定义所有接口和 pojo,然后您的插件与该共享 dll 链接,主程序也是如此。然后主程序动态加载插件。为了使其面向未来,您必须编写自定义代码来检测您的主应用程序不知道的所有事情并忽略它们。
-
您可以使用 MEF (msdn.microsoft.com/en-us/library/dd460648.aspx) 或 MAF (msdn.microsoft.com/en-us/library/bb384200.aspx) 来处理这些问题。 MAF 将能够处理版本控制。 MEF 可以处理版本控制,但您必须提供帮助。
-
哦 - Windows 版本信息很好 - 您可以/应该将版本信息与所有 .exe 和 .dll 一起使用。只需将其添加到您的项目“构建属性”中。像MEF 这样的废话我不太乐观——我认为你应该让它尽可能简单。另一个好链接:stackoverflow.com/a/2387758/421195
标签: c# plugins backwards-compatibility forward-compatibility