[转] 通过反射实现动态功能模块加载
程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。
下面我们将介绍如何通过不使用反射的方式和使用反射的方式加载功能模块。实现效果:
1. WinForm 主程序
主程序我们使用Winform程序,VS2008 工具C#语言开发。包括工具栏、状态栏及TabControl控件。我们使用TabControl 作为功能模块容器,装载各个功能模块。实现效果如下:
2. 不使用反射方式加载功能
新增信息资料功能模块项目,项目增加资料管理(UCCustomerInfo)用户控件。资料管理显示、加载、导入、导出资料功能。
2.1. WinForm 主程序调用
WinForm 添加资料管理项目引用。点击信息资料时,实例资料管理功能模块进行加载。
3. 使用反射方式加载功能
使用反射方式加载功能,需要定义功能模块接口、设计配置功能模块、主程序读取配置文件动态加载功能模块。
3.1. 定义功能模块接口
功能模块接口(UCModule)定义为用户控件(UserControl),虚拟两方法,供具体功能模块进行重写。
3.2. 实现功能模块实例
功能模块还是前信息资料管理功能,但不是继承用户控件(UserControl),而是继承功能模块接口(UCModule)。
3.3. 设计功能模块配置
功能模块配置采用xml文件定义,定义为:模块编号、模块名称、模块项目、模块对象。
3.4. 通过配置动态功能模块
读取功能模块配置,返回系统定义的功能模块列表。增加工具栏按钮,点击工具栏按钮时,加载配置的功能模块项目。
至此,如何通过反射动态加载功能模块已讲解完毕。从两示例实现的方式,我们可明显看出,采用动态加载的方式,比直接使用的方式还是要复杂得多,所以小型项目、团队成员不多的情况下,还是建议不使用反射比较好。
你们的评论、反馈,及对你们有所用,是我整理材料和博文写作的最大的鼓励和唯一动力。欢迎讨论和关注!
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。