[转] 通过反射实现动态功能模块加载
2016-09-11 19:56
519 查看
原文 如何通过反射实现动态功能模块加载
程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。
下面我们将介绍如何通过不使用反射的方式和使用反射的方式加载功能模块。实现效果:
至此,如何通过反射动态加载功能模块已讲解完毕。从两示例实现的方式,我们可明显看出,采用动态加载的方式,比直接使用的方式还是要复杂得多,所以小型项目、团队成员不多的情况下,还是建议不使用反射比较好。
程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。
下面我们将介绍如何通过不使用反射的方式和使用反射的方式加载功能模块。实现效果:
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. 通过配置动态功能模块
读取功能模块配置,返回系统定义的功能模块列表。增加工具栏按钮,点击工具栏按钮时,加载配置的功能模块项目。至此,如何通过反射动态加载功能模块已讲解完毕。从两示例实现的方式,我们可明显看出,采用动态加载的方式,比直接使用的方式还是要复杂得多,所以小型项目、团队成员不多的情况下,还是建议不使用反射比较好。
相关文章推荐
- 如何通过反射实现动态功能模块加载
- C#如何通过反射实现动态功能模块加载
- 如何通过反射实现动态功能模块加载
- AngularJs 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
- 动态加载MATLAB生成的dll并反射dll里的函数,实现多返回值的功能
- C#通过反射实现动态加载DLL
- AngularJs 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
- 详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
- AngularJs 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
- AngularJs 通过 ocLazyLoad 实现动态(懒)加载模块和依赖-转
- C#实现反射调用动态加载的DLL文件中的方法
- C#动态执行类库中的函数:利用反射实现(js)Eval,asp(Execute)功能
- 动态加载Silverlight应用的dll文件(可实现插件功能)
- ExtJS Tree利用json(直接传List TreeNode,不需要转化为JSONArray或通过JSP传)在Struts 2实现Ajax动态加载树结点
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象
- 如何通过动态生成Html灵活实现DataGrid分类统计的界面显示功能 activeandbadboy [原作]
- 利用反射实现类的动态加载
- C#利用反射实现(js)Eval,asp(Execute)功能 动态执行类库中的函数
- 利用反射实现窗体动态加载
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象