.NET中的插件式架构

dev*_*ium 9 .net c# plugins extensibility

我正在尝试实现类似应用程序的插件.我知道已经有几个解决方案,但这只是证明这个概念,仅此而已.这个想法是默认情况下使应用程序主应用程序几乎没有功能,然后让插件相互了解,让它们实现所有需要的功能.

出现了几个问题:

  1. 我希望运行时的插件通过我的应用程序了解彼此.这并不意味着在代码时他们无法引用其他插件的程序集,所以他们可以使用它的接口,只有插件功能初始化应该始终通过我的主应用程序.例如:如果我同时加载了插件X和Y,并且Y想要使用X的功能,它应该通过我的应用程序"注册"它的兴趣来使用它的功能.我必须在我的应用程序中有一种"字典",我存储所有加载的插件.注册我的应用程序后,插件Y将获得对X的引用,以便它可以使用它.这是一个好方法吗?
  2. 当编码使用X的插件Y时,我需要引用X的程序集,所以我可以针对它的接口进行编程.这有版本控制的问题.如果我对插件X的过时版本编码我的插件Y怎么办?我是否应该始终使用所有组件都在的"中央"位置,总是有最新版本的组件?

有没有专门处理这些.NET设计的书?

谢谢

编辑:我认为人们正在偏离我提出的两个问题.我可以看看MEF和#develop,但我想得到具体的问题答案.

Mat*_*eer 6

我建议调查MEF.这是一种在.NET中进行插件的新方法.例如,这是为VS2010做新插件的推荐方法.我自己没有用过它,但我对它的看法看起来很棒.添加这个作为对其他人的刺激的答案:)


Joe*_*orn 3

查看System.AddIn命名空间。它的级别比 MEF 低一些,因此应该为您提供所需的“自己实现”体验。