您的位置:首页 > 编程语言 > C#

使用反射和codeDOM实现C#插件开发(1)由来

2016-04-09 12:05 344 查看
当前已经开发完成了一个主程序框架,但是有些新功能要加进去。那么在不修改主程序的情况下,用什么方法能实现快速、方便的将新功能实现呢?

上网查了一下,发现C#单机程序开发时,插件基本都是采用反射机制进行开发的。(请教大牛,还有没有其他方式,做插件开发的,望不吝赐教啊!)

网上也有很多反射的例子,但是我也有些特殊需求。

因为我从事的是工程计算相关的工作,除了一些商业软件,如ANSTS,FLUENT等来进行工程力学计算外,很多客户有自己的一些算法,比如,有计算导弹弹道的,有计算水轮机冷却的,有计算核电设备应力修正的,等等。

这些算法有一个通用的方式,就是定义一些参数,然后调用各种力学公式,算出一些结果参数。客户根据这些结果参数来判断设计是否合理。

那么客户的计算流程就是,根据不同工况,设置不同的参数值,然后调用函数,进行计算,得出结果。

那么,这些输入参数在不同工况下,采用不同值怎么办呢?仅仅凭借反射,貌似只能获取信息,不能往里面传递信息吧?(请教大牛,是不是这样的?)

我需要有个东西,能够向dll中的参数传递信息。这时候,我想到了codeDOM。每次调用dll时候,能根据dll的信息,自动创建一个类,使用一个函数向dll实例中传递参数。

这样,又有问题了:

1.我的具有新功能的dll到底应该怎么写,才能被我的主程序认识并调用呢?dll中的参数我怎么能设置默认值,并能够取出来呢?

2.这个动态类的函数怎么写呢?怎么能够将dll的实例传进去,并能够点出其中包含的对象呢?怎么才能够支持各种各样的数据类型呢?

唉,都需要去测试啊!

现在,终于有了初步答案。

1.这个dll必须要有一些约定,比如定义一些接口,实现求解计算的功能。定义一些属性,用来标记哪些参数是可以被反射的输入参数,哪些参数是可以被反射的输出参数;还用来标记每个参数的默认值,每个参数的说明等。

2.动态类使用固定namespace,classname,固定的函数名称等,让我的主程序能够写死调用。通过上一步反射得到各个输入参数,然后在动态类的函数中对这些变量进行赋值。

好了,下面可以进行编码测试了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# codeDOM 插件