2011-05-04 98 views
0

我正在为客户端开发一个应用程序,并正在实施插件体系结构。在这里和其他地方有很多讨论和例子都帮助我了解基础知识,并且我有一个工作原型。.net插件体系结构问题

在启动时,我遍历了plugins文件夹中的程序集,循环遍历每个类中的类型,并创建了实现我的插件接口的类型的实例。我使用的每种类型的“名称”属性来填充在主窗体上的菜单中选择,但我不是很高兴这样做的原因有两个:

  1. 我想我可以得到名字我有兴趣不必创建一个实例,也许有属性?没有太多的经验,我不知道如何做这项工作,或者确实如果这是可以/应该如何完成的。

  2. 给定一组N个插件,我的应用程序在任何特定运行过程中可能不需要所有这些插件的实例,但可能需要其中一个M实例,所以对我来说创建没有任何意义加载时的实例。

有人可以帮助我理解建筑师的最佳方法吗?

非常感谢!

Bo

回答

2

是的,你可以使用属性。属性可用于类型,与类型的实例相关。问题在于你必须迭代所有程序集中的所有类型来查看你的属性是否存在。这不是太复杂,但可能会有问题,如果你错过任何DLL依赖关系。

在附注中,您是否调查了MEF?它是开箱即用的.NET 4的一部分,可以为您处理大量的这类事情。

+0

谢谢,内特。我没有看过MEF,但会这样做。今天下午我一直在尝试自定义属性,这看起来非常平易近人。 – 2011-05-04 22:20:12

0

我写了一篇关于制作插件系统几年前的一篇文章:http://www.codeproject.com/KB/macros/pluginsystem.aspx

陷阱:

  • 你应该在一个单独的AppDomain您的属性之后扫描所有组件。因为他们不能卸载。
  • 如果你想能够卸载插件,你需要加载每个插件在一个单独的appdomain。
  • 在做其他事情之前创建一个异常策略。
  • 尝试使用现有的插件框架,如果你能
+0

谢谢,jgauffin。我看了你的插件系统,这几乎是我自己想出的。不过,您对单独的应用程序域的建议是一个很好的建议 - 我会研究这一点。 – 2011-05-04 22:21:21