本文是基于昨天的
利用反射做插件式系统的一次实践 所写的一个补充。这个系统有几个不足:
- 所有的插件依赖于主程序,这是一个很大的弊病;
- 公用的基础代码没有。如日志处理、异常处理等公用的基础代码没体现,而且这个工程里到处都有相同代码的痕迹,应该予以重构 ;
基于以上的考虑,我将这个 Demo 重构:增加一个 CS.Utility 工程,其作用是实现一些公用代码,如日志、异常、字符处理等,同时将 IPlugin 移到此工程中,所有的插件都必须引用此工程并实现此接口;所有的插件去掉与 CS.Project 依赖,它应该实现其核心的业务功能,如插件的加载、权限、多线程运行等,它充当了整个程序的一个骨架与容器外,没有任何其他的作用,我觉得最理想的状态是它离开了所有的插件,程序能跑起来,但没什么内容与用途。其项目结构如下:
详细代码见附件。
点我下载 小技巧:在 VS2008 中将插件的 dll 在生成后复制到主程序的目录下,依次点项目右键-属性-生成事件-生成后事件命令,敲入:
copy $(TargetPath) d:\e\bin\ 即可完成将这些文件复制到一个地方。