开发一个动态系统
在现实的开发环境中,上述应用程序需要动态提供新菜单代码。为此可以有几个选择。最简单、最容易想到的做法就是通过“对象抽象”来创建MenuItem对象。然后,可随同构建好的程序集中的一个派生对象,动态地加载插件程序集。然后,该对象可用于生成它自己的MenuItem对象,并随即将其加载到菜单中。
采用这种方法,可简化代码与对象的关联,而且可避免使用大量回调函数。由于篇幅所限,本文不准备详细讲述这一过程所涉及的步骤(这些步骤主要和“通用语言运行时反射”以及“程序集动态执行”有关,和动态菜单则没有多大关系)。下面只提供了对这些步骤的一个简要说明:
1. 定位程序集DLL——在一个目录中查找要添加的新文件,或者要求用户指定目标路径以便加载插件。
2. 与插件API协商——最容易的做法就是发布一个必须在远程DLL中出现的接口。只要存在从这个接口派生的任何类,就表明是一个合格的插件。
3. 定位DLL——使用LoadFrom方法,通过.NET Assembly类来动态加载程序集。
4. 验证插件状态——确保程序集中的一个类支持你定义好的接口。同样能利用反射来实现。
5. 实例化一个类实例——加载了程序集后,就可用Assembly类的CreateInstance方法在支持你的接口的类中创建对象的一个新实例。
6. 获取MenuItem——只需在你要求的接口中,规定一个函数必须支持GetMenuItem方法。那个方法允许类返回一个提供了所有功能的MenuItem对象。
7. 添加MenuItem——使用前面已经展示的代码,就可完成最后一步的操作。
