C#实现插件构架浅析

开发 后端
这里介绍C#实现插件构架,C# 是面向对象的程序设计语言。它提供了 interface 关键字来直接定义接口。同时, System.Reflection 命名空间也提供了访问外部程序集的一系列相关对象。

C#语言有很多值得学习的地方,这里我们主要介绍C#实现插件构架,包括介绍几个解决方案的对比等方面。

假设你设计的程序已经部署到用户的计算机上,并且能够正常运行了。但是有一天,用户打来了电话——他们要求增加新的功能。确定了用户的需求后,你竟然发现原有的软件架构已经无法胜任新增任务的需求——你需要重新设计这个应用了!但问题是,就算你又用了一个开发周期完成了用户需要的应用,却不能保证用户的需求不会再次变更。也就是说,需求蔓延的可能性依然存在。因此,这种情况下C#实现插件构架更能显示出它的优越性。

一. 几个解决方案的对比

我总结了一下我所接触到的C#实现插件构架,大致上可分为以下几类:

1.脚本式

使用某种语言把插件的程序逻辑写成脚本代码。而这种语言可以是 Python ,或是其他现存的已经经过用户长时间考验的脚本语言。甚至,你可以自行设计一种脚本语言来配合你程序的特殊需要。当然,用当今***的 XML 是再合适不过了。

这种形式的特点在于,稍有点编程知识的用户就可以自行修改你的脚本( ^_^ 假如你不加密它的话)。我们无法论证这是好处还是坏处。因为,这种情况所造成的后果是不可预知的。

2.动态函数库 DLL

插件功能以动态库函数的形式存在。主程序通过某种渠道(插件编写者或某些工具)获得插件 DLL 中的函数签名,然后在合适的地方调用它们。用过 Matlab 的读者都知道, Matlab 中的各项功能几乎都是些动态链入的函数。

3.聚合式

顾名思义,就是把插件功能直接写成 EXE 。主程序除了完成自己的职责外,还负责调度这些“插件”。我不喜欢这种形式。这使插件与插件之间,主程序与插件之间(主要是这一点)的信息交流困难了许多。巴比伦塔的失败 [1] 从某种程度上讲就是信息交流无法实现造成的。

4.COM 组件

COM [2] 的产生给这个世界增添了几分活力。只有接口!我们的插件需要做的只是实现程序定义的接口。主程序不需要知道插件怎样实现预定的功能,它只需要通过接口访问插件,并提供主程序相关对象的接口。这样一来,主程序与各插件之间的信息交流就变得异常简单。并且,插件对于主程序来说是完全透明的。

二. 决策

C# 是面向对象的程序设计语言。它提供了 interface 关键字来直接定义接口。同时, System.Reflection 命名空间也提供了访问外部程序集的一系列相关对象。这就为我们在C#实现插件构架打下了坚实的基础。

【编辑推荐】

  1. C# this关键字详解
  2. C#调用析构方法详解
  3. C#释放托管资源简单描述
  4. C#单路代理简单分析
  5. C#文法产生式概述
责任编辑:佚名 来源: 博客园
相关推荐

2009-08-18 10:14:19

C#插件构架

2011-06-03 10:15:13

2009-08-31 16:48:02

C#实现IDispos

2009-09-01 18:29:24

C#实现多个接口

2009-08-21 09:20:44

C#异步套接字

2009-08-28 15:57:56

C#线程传递参数

2009-09-09 11:29:32

C# TextBox事

2009-08-26 09:54:45

C#打印预览C#打印

2009-08-13 18:15:06

C#继承构造函数

2009-09-02 17:24:44

C#关机代码

2009-09-07 09:36:29

C# DisposeDispose方法

2009-08-28 16:03:15

C#程序实现鼠标移动

2009-08-12 16:26:30

C#读取XML文档

2009-09-07 05:24:22

C#窗体继承

2009-09-10 12:00:09

C# listbox

2009-09-04 13:55:04

C#文档自动化

2009-09-09 16:53:49

C# XmlSeria序列化

2009-08-07 17:25:37

C# SortedLi

2009-08-27 18:09:49

C#接口的实现

2009-08-27 14:29:28

显式实现接口
点赞
收藏

51CTO技术栈公众号