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

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

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

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

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

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

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


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


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


这样,又有问题了:

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

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

唉,都需要去测试啊!


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

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

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


好了,下面可以进行编码测试了!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技道两进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值