动态组件插拔
在实现动态组件插拔之前,我们必须了解一个概念:反射(Reflection)。
所谓反射,就是仅依据名字来创建一个对象。
举个例子,在上面的例子中,我可以直接给定一个字串:“ CSharpClassNameSpace.CSharpRect”,然后我就可以生成这个对象,并调用它的Area()方法求面积!其前提条件是程序能访问存放这些类的DLL文件。
好了,现在可以说说我们的构想了:
我们把某个程序要用到的DLL和其中的类名放在一个配置文件中,程序启动时读取这个文件,就可以自动地加载外部指定的DLL,实现程序的组件动态装配。当我需要更换程序中的某个组件时,我只需要将新DLL复制到程序文件夹之下,系统就马上可以使用新的组件,而不用重新编译或修改组件调用者原有的任何代码!
现在看看我们的示例是怎么样的!
我们创建两个VB类库,每个类库都封装了一个窗体。VBDynamicComponent组件中封装了以下窗体:
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype>
图 6 组件一
VBDynamicComponent2组件中封装了以下窗体:
图 7 组件二
主程序是一个Windows应用程序,它可以动态创建两个组件中的任何一个窗体对象,并显示它们:
图 8 示例程序主窗体
主程序在启动时会读取一个系统配置清单,是XML格式的,如下所示:
<?xml version="1.0" encoding="GB2312" ?>
<Config>
<Component ComponentName=" DynamicComponent.VBForm1" ComponentFileName="DynamicComponent.dll" />
<Component ComponentName="VBDynamicComponent2.VBForm2" ComponentFileName="VBDynamicComponent2.dll" />
</Config>
主程序根据清单装入指定的组件DLL文件,并依据ComponentName属性值创建对象,排列在第一位的组件窗体被自动显示。
大家看一看,这样一个系统组件装配清单,象不象一个厨师准备大餐时的原料清单?现在就开始制作我们的“满汉全席”吧!
分享到:
相关推荐
极致业务基础平台(Jeez Business Framework,简称为JBF)基于Microsoft .NET开发技术和模型驱动架构,是面向业务应用的管理软件开发平台。极致业务基础平台不仅能够快速地开发应用软件,而且能够根据的用户需求快速...
介绍.NET组件编程技术,包括自定义控件、混合语言开发与动态组件插拔
大名顶顶的XPO,一些基础知识的介绍..可以去官网下载组件
Grove Develop Component结合可复用面向对象软件开发原理(泛指设计模式),注重提高软件开发中的代码重用率,并使软件开发架构清晰,有利于加快软件开发速度,减低软件维护成本. Grove Tool Kit 是针对Grove Develop ...
Grove Develop Component结合可复用面向对象软件开发原理(泛指设计模式),注重提高软件开发中的代码重用率,并使软件开发架构清晰,有利于加快软件开发速度,减低软件维护成本. Grove Tool Kit 是针对Grove Develop ...
在分析主要开发技术的基础上,介绍了如何在.NET平台下用C#语言开发一个实用的通用查询组件,详细叙述了该查询组件的设计方法、功能实现的部分程序代码.在实际数据库的应用系统中,各子系统在调用该组件时只要设置相应...
《基于ArcObjects与C#.NET的GIS应用开发》在广泛...《基于ArcObjects与C#.NET的GIS应用开发》可作为高等院校地理信息系统、测绘等专业的本科生和研究生的教材,也可供从事地理信息系统开发和相关软件开发人员阅读参考。
利用网络和数据库技术,结合目前硬件价格普遍下跌与宽带网大力建设的有利优势,应用Active Server Page技术和采用Access数据库系统组件来构成考试的应用服务系统,开发了基于B/S模式多用户小区物业系统程序。...
1、基于 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发 2、采用MVC的框架模式,具有耦合性低、重用性高、生命周期成本低、可维护性高、有利软件工程化管理等优点 3、采用WebAPI,客户端完全摆脱了...
极致管理软件开发平台基于Microsoft .Net开发技术和模型驱动的技术架构,是面向业务应用的管理软件开发平台。极致管理软件开发平台提供数据实体定义工具、界面设计工具、系统发布工具和运行时框架组件,帮助软件开发...
应用系统建立在此框架之上,采用构件式、可复用开发,节省开发成本,加快开发速度,在软件开发上更好的做到多快省。 适合低中高任意开发水平的开发者,可以开发OA、ERP、BPM、CRM、WMS、TMS、MIS、BI、电商平台后台、...
应用系统建立在此框架之上,采用构件式、可复用开发,节省开发成本,加快开发速度,在软件开发上更好的做到多快省。 适合低中高任意开发水平的开发者,可以开发OA、ERP、BPM、CRM、WMS、TMS、MIS、BI、电商平台后台、...
基于Visual Studio 2017 WPF开发的一款桌面版录音软件,框架.NET Framework 4.5
1、基于ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout的架构设计开发 2、采用MVC的框架模式,具有耦合性低、重用性高、生命周期成本低、可维护性高、有利软件工程化管理等优点 3、采用WebAPI,客户端完全摆脱了代理...
本书内容提挈: ...本书讲述了基于组件的开发技术、实用的建议和真实的示例,可以帮助您在.NET环境下提高设计、调试和部署应用程序的效率,并能有效地消除错误,非常适合于使用Visual C#的中高级程序员阅读。
论文首先介绍了面向对象技术的软件工程开发方法和ASP.NET组件对象模型。在此基础上,结合对湖南省卫生厅综合信息办公系统进行了需求分析,建立了对象、动态和功能模型。论文着重研究了如何采用ASP.NET技术进行系统...
Visual C#基于组件的开发"的图书目录…… 第一部分 概论 第一章 开发过程 第二章 组件结构 第三章 组件设计 第四章 组件分类 第五章 调试 第六章 部署 第二部分 前端组件 第七章 WINDOWS窗体组件 第八章 ...
Microsoft Access2000是微软公司开发的基于Windows平台的小型数据库管理系统,是Office 2000 的组件之一。它承袭了旧版本Access的各项优点,又新增或完善了数据访问页、个性化菜单、internet/intranet、编程、安全...
使用Asp.net Core WebApi,Jwt,Swagger2,AutoFac,SqlSugar,AutoMapper,DotLiquid,Nlog,Redis等组件及技术实现。 管理系统是一种通过计算机技术实现的用于组织、监控和控制各种活动的软件系统。这些系统通常...
应技术,内容涉及Visual Basic.NET的基本语法、SQL结构化查询语言以及基于.NET平台的数据库开发 技术。重点介绍了ADo.NET及其主要组件,包括连接对象、命令对象、数据阅读器、数据适配器、数 据集等,并通过实例...