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

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

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

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

 

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

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

 

 

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

时间: 2024-11-01 23:12:51

如何通过反射实现动态功能模块加载的相关文章

Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块完美实现_实用技巧

中午的时候发了第一篇 Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块 ,发现实现上还是有问题,有很多理解不到位的地方,晚上详细解决下了,终于实现MVC各模块按需加载了,哈皮. 上篇文章中,关于ExtJs这个玩意的评论就跟java和.Net那个好一样,既然上了贼船,就难下了,而且对于企业级的应用我个人觉得Extjs框架还是不错的,尤其是没有UI设计的团队(苦逼的程序员就兼UI吧),起码难得发现一个做的比较好的UI框架(国产的miniUI貌似看的过去,其他的就有点

【图文】详解淘宝web服务器Tengine动态模块加载的使用方法

Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.目前已开源.它由Tengine团队开发和维护.Tengine团队的核心成员来自于淘宝.搜狗等互联网企业.Tengine继承Nginx的所有特性,100%兼容Nginx的配置.本文主要介绍它的"动态模块加载(DSO)"的基本使用方法. 什么是"动态模块加载"呢?打个简单的比: 默认Nginx没有echo功能,传统情况下,我们会下载echo模块,然后

JavaScript循环加载模块的方法及模块加载技术思考

"循环加载"(circular dependency)指的是,a脚本的执行依赖b脚本,而b脚本的执行又依赖a脚本.     // a.js    var b = require('b');     // b.js    var a = require('a'); 通常,"循环加载"表示存在强耦合,如果处理不好,还可能导致递归加载,使得程序无法执行,因此应该避免出现. 但是实际上,这是很难避免的,尤其是依赖关系复杂的大项目,很容易出现a依赖b,b依赖c,c又依赖a这样

概述如何实现一个简单的浏览器端js模块加载器_javascript技巧

在es6之前,js不像其他语言自带成熟的模块化功能,页面只能靠插入一个个script标签来引入自己的或第三方的脚本,并且容易带来命名冲突的问题.js社区做了很多努力,在当时的运行环境中,实现"模块"的效果. 通用的js模块化标准有CommonJS与AMD,前者运用于node环境,后者在浏览器环境中由Require.js等实现.此外还有国内的开源项目Sea.js,遵循CMD规范.(目前随着es6的普及已经停止维护,不论是AMD还是CMD,都将是一段历史了) 浏览器端js加载器 实现一个简

insmod模块加载过程代码分析1【转】

转自:http://blog.chinaunix.net/uid-27717694-id-3966290.html 一.概述模块是作为ELF对象文件存放在文件系统中的,并通过执行insmod程序链接到内核中.对于每个模块,系统都要分配一个包含以下数据结构的内存区.一个module对象,表示模块名的一个以null结束的字符串,实现模块功能的代码.在2.6内核以前,insmod模块过程主要是通过modutils中的insmod加载,大量工作都是在用户空间完成.但在2.6内核以后,系统使用busybo

《JavaScript框架设计》——第 2 章  模块加载系统 2.1AMD规范

第 2 章 模块加载系统 任何语言一到大规模应用阶段,必然要经历拆分模块的过程,以有利于维护与团队协作.与Java走得最近的dojo率先引入了加载器,早期的加载器都是同步的,使用document.write与同步Ajax请求实现.后来dojo开始以JSONP的方法设计它的每个模块的结构,以script节点为主体加载它的模块,这个就是目前主流的加载器方式.不得不提的是,dojo的加载器与AMD规范的发明者都是James Burke,dojo加载器独立出来就是著名的require加载器. 2.1 A

Node.js 模块加载机制 Require()

require() 不要把这里的Require()和RequireJS混为一谈.不过有意思的是,Typescript的模块定义,甚至同时支持这两种模块机制. 导入和使用外部模块,只是简单的一句require(),看看angular/material/docs下的编译文件gulpfile.js的代码片段.对模块导入和使用有个直观的感觉. var gulp = require('gulp'); var concat = require('gulp-concat'); var fs = require

关于javascript模块加载技术的一些思考_javascript技巧

前不久有个网友问我在前端使用requireJs和seajs的问题,我当时问他你们公司以前有没有自己编写的javascript库,或者javascript框架,他的回答是什么都没有,他只是听说像requirejs和seajs是新东西新技术,很有价值所以想用它. 这位网友的问题引起了我对javascript模块加载技术的思考,上篇文章我给出了自己写的一个javascript库的基本结构,其实写这篇文章的一个起因就是因为我想使用requirejs或者seajs这样的技术来重新设计我写javascrip

javascript框架设计读书笔记之模块加载系统_javascript技巧

模块加载,其实就是把js分成很多个模块,便于开发和维护.因此加载很多js模块的时候,需要动态的加载,以便提高用户体验. 在介绍模块加载库之前,先介绍一个方法. 动态加载js方法: 复制代码 代码如下: function loadJs(url , callback){ var node = document.createElement("script");       node[window.addEventListener ? "onload":"onre