那么它将被包装为一个 " 实例这个实例就会被添加到主程序的树形显示
区
实现
主程序框架被设计为两个程序集第一个程序集是 28它提供了主程序的
0". 窗体界面第二个程序集是 2"它提供了主程序和插件之间进
行通信所需的所有类型定义比如 接口就是在 2" 里面配置的这样
它可以被主程序和插件等价的访问这两个程序集在一个文件夹内同样的附加的作为插
件的程序集也需要被配置在一起那些程序集被配置在 文件夹内主程序目录的一
个子文件夹& 类在 & 程序集中定义而 类
在 程序集中定义这个例子指定插件文件以 为扩展名事实上这些
插件就是个普通的 类库文件只是通常库文件使用" 扩展名这里用 罢了特
殊的扩展名对于程序运行是完全没有影响的但是它可以让用户更明确的知道这是个插件
文件
设计的比较
并不是一定要像例子程序这样设计才算正确的比如在开发一个带有插件的 程序时并
不一定需要使用属性例子里使用了两个自定义的属性其实也可以新定义两个 接口
的参数来实现这里选择用属性是因为插件的名字和它的描述在本质上确实就是一个事物
的属性符合规范当然了使用属性会造成主程序需要更多的关于反射的代码对于不同的
需求设计者总是需要做出合理的决定
总结
示例程序被设计为尽量的简单以帮助理解主程序和插件之间的通信在实际做产品的时
候可以做很多的改进以满足实用要求比如:
通过对 接口增加更多的方法属性事件可以增加主程序和插件之间的通信点两
者间的更多的交互操作使得插件可以做更多的事情
*可以允许用户主动选择需要加载的插件
源代码
示例程序的完整的源代码可以在这里下载:55...5"5 #:
译者注:以前就考虑过在 里面如何实现插件机制做来做去总是觉得设计上不够好而
昨天在网上无意中发现了这篇文章写的实在是太棒了所以看完之后决定把它翻译过来前
后一共花了大概 ; 个小时吧翻译的可能不太好请见谅文中有什么错误请不吝指正
备注
! '""0&<<-
图片一