【发布时间】:2010-05-07 21:48:36
【问题描述】:
我正在尝试实现一个类似插件的应用程序。我知道已经有几种解决方案,但这只是概念的证明,仅此而已。这个想法是让应用程序的主应用程序默认几乎没有功能,然后让插件相互了解,让它们实现所有需要的功能。
出现了几个问题:
- 我希望插件在运行时通过我的应用程序相互了解。这并不意味着在代码时他们不能引用其他插件的程序集,因此他们可以使用它的接口,只是插件功能初始化应该始终通过我的主应用程序。例如:如果我同时加载了插件 X 和 Y 并且 Y 想要使用 X 的功能,它应该通过我的应用程序“注册”它的兴趣以使用它的功能。我必须在我的应用程序中有一种“字典”,用于存储所有加载的插件。在注册对我的应用程序感兴趣后,插件 Y 将获得对 X 的引用,以便它可以使用它。这是一个好方法吗?
- 在编写使用 X 的插件 Y 时,我需要引用 X 的程序集,这样我就可以针对它的接口进行编程。那有版本控制的问题。如果我针对插件 X 的过时版本编写插件 Y 怎么办?我是否应该始终使用所有程序集所在的“中心”位置,始终保持最新版本的程序集?
是否有专门针对 .NET 的此类设计的书籍?
谢谢
编辑:我认为人们正在远离我提出的 2 个问题。我可以查看 MEF 和 #develop,但我想获得我提出的问题的具体答案。
【问题讨论】:
-
我建议研究一下 MEF,它是全新的,但看起来很有前途。
-
@Matt - 认为你应该把这个作为答案 - 这正是我要说的
-
我已经听说过 MEF,但正如 OP 中所述,我的想法不是使用已经构建的框架,而是自己实现它。它不需要非常复杂的东西。
-
@Matt - 添加您的答案。 MEF 是一个不错的选择,如果您也想了解“如何在 .net 中做插件”,它也是一个很好的起点。
-
他不想使用 MEF。他想构建类似于 MEF 的东西。他在他的帖子中说得很清楚。
标签: c# .net plugins extensibility