zoukankan      html  css  js  c++  java
  • [转] 通过反射实现动态功能模块加载

    原文 如何通过反射实现动态功能模块加载

    程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。

      下面我们将介绍如何通过不使用反射的方式和使用反射的方式加载功能模块。实现效果:

    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. 通过配置动态功能模块

    读取功能模块配置,返回系统定义的功能模块列表。增加工具栏按钮,点击工具栏按钮时,加载配置的功能模块项目。

    至此,如何通过反射动态加载功能模块已讲解完毕。从两示例实现的方式,我们可明显看出,采用动态加载的方式,比直接使用的方式还是要复杂得多,所以小型项目、团队成员不多的情况下,还是建议不使用反射比较好。

  • 相关阅读:
    用新版本的job打成jar包在终端运行mapreduce程序遇到的问题 找不到Map class?
    在map端使用关联数组实现wordcount
    基数排序c++实现
    (sql补充)关于锁
    (sql server补充)关于事务
    (sql补充)关于游标
    java api文档的阅读技巧
    android开发学习路线图
    (sql补充)关于索引
    Android开发之学习路线
  • 原文地址:https://www.cnblogs.com/arxive/p/5862542.html
Copyright © 2011-2022 走看看