动态组件插拔
在实现动态组件插拔之前,我们必须了解一个概念:反射(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属性值创建对象,排列在第一位的组件窗体被自动显示。
大家看一看,这样一个系统组件装配清单,象不象一个厨师准备大餐时的原料清单?现在就开始制作我们的“满汉全席”吧!
分享到:
相关推荐
《.Net软件开发项目(源码):深入理解与实践》 .Net软件开发项目,以其高效、跨平台的特性,成为众多开发者的选择。本项目基于C#语言,结合了锐信软件开发平台,旨在提供一个全面的、可扩展的开发环境,让开发者能够...
介绍.NET组件编程技术,包括自定义控件、混合语言开发与动态组件插拔
1.5章节提到了ArcGIS软件开发套件(SDK)和资源: - ArcGIS SDK提供了详细的文档、示例代码和工具,帮助开发者构建基于ArcObjects的应用程序。 - ESRI Developer Network网站是一个宝贵的资源库,提供最新的开发信息...
2. MVC(Model-View-Controller)模式:在本项目中,可能采用了MVC架构,这是一种软件设计模式,将应用程序分为三个核心组件——模型、视图和控制器,提高了代码的可读性和可维护性。 3. SQL Server数据库:作为...
3. **多语言支持**:可实现多语言版本的软件开发。 4. **数据库兼容性**:支持多种数据库系统,如SQL Server、Oracle等。 5. **集成工作流引擎**:内置工作流引擎,便于实现复杂业务逻辑。 6. **全面扩展性**:提供...
1、基于 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发 2、采用MVC的框架模式,具有耦合性低、重用性高、生命周期成本低、可维护性高、有利软件工程化管理等优点 3、采用WebAPI,客户端完全摆脱了...
【基于ASP.NET开发的视频网站系统】是一种使用微软的ASP.NET技术构建的Web应用程序,它提供了丰富的功能,如用户互动的视频浏览、点赞、收藏、关注作者以及视频上传等。这个实训项目旨在帮助开发者深入理解和实践ASP...
在应用软件开发平台的选择上,Dreamweaver被用于前台网页的设计,它是一个可视化编辑工具,可以帮助开发者快速创建美观且功能完善的网页界面,与ASP.NET后端的结合使得前后台交互更为流畅。 在需求分析阶段,需要...
【基于ASP.NET的学生管理系统完整源码】是一款专为教育机构设计的管理软件,它利用了Microsoft的ASP.NET技术,构建了一个高效、稳定的网络平台,旨在优化学生信息的管理和操作流程。ASP.NET是.NET框架的一部分,提供...
这部分通常涉及ASP.NET的表格控件、文本框、日期选择器等元素,以及与数据库交互的ADO.NET组件。为了确保用户体验,页面可能使用了AJAX(Asynchronous JavaScript and XML)技术进行局部刷新,使操作更加流畅。 ...
Grove Develop Component结合可复用面向对象软件开发原理(泛指设计模式),注重提高软件开发中的代码重用率,并使软件开发架构清晰,有利于加快软件开发速度,减低软件维护成本. Grove Tool Kit 是针对Grove Develop ...
### 基于.NET的通用查询组件的开发 #### 概述 在当前的信息时代,数据库查询成为了大多数软件系统中的核心功能之一。然而,在实际应用中,为了满足不同子系统的查询需求,通常需要为每个子系统单独开发专门的查询...
本资料"基于C#.NET的Autocad二次开发范例"就专注于这一领域,旨在帮助初学者快速掌握如何利用C#编程语言对AutoCAD进行深度定制。 C#是一种现代化、面向对象的编程语言,由微软公司推出,它与.NET Framework紧密结合...
总的来说,基于ASP.NET的BBS开发是一项涉及数据库设计、前端开发、安全策略、用户体验等多个方面的综合性任务,需要开发者具备扎实的编程基础和良好的软件工程思维。通过不断学习和实践,开发者可以构建出高效、稳定...
Grove Develop Component结合可复用面向对象软件开发原理(泛指设计模式),注重提高软件开发中的代码重用率,并使软件开发架构清晰,有利于加快软件开发速度,减低软件维护成本. Grove Tool Kit 是针对Grove Develop ...
【标题】"基于c#.net的小型画图软件"是一个使用C#编程语言和.NET框架开发的简单图形编辑工具。...对于学习C#和.NET开发的初学者来说,这是一个很好的实践项目,可以帮助他们理解如何将理论知识应用到实际的软件开发中。
在软件开发过程中,我们遇到了许多重复机械的工作,例如数据持久层实现、日志、ASP.NET MVC、IOC以及自动映射等。这些组件的组合使软件系统的复杂度急剧上升,难以设计出一个均衡协调的框架。基于此,我们需要一个...
ASP.NET MVC(Model-View-Controller)是一种轻量级、基于组件的Web应用程序架构,它由微软开发并应用于.NET Framework中,为开发者提供了构建可测试、灵活且易于维护的Web应用的强大工具。本项目实例是针对初学者...
总的来说,"基于ASP.NET的学生宿舍管理系统"是一个涵盖多方面技术的Web应用实例,不仅展示了ASP.NET MVC框架的应用,还涵盖了数据库设计、用户认证、数据统计等多个知识点,对于学习和实践ASP.NET开发具有很高的价值...