动态代码-C#

本文关键字:-C# 代码 动态 | 更新日期: 2023-09-27 18:24:49

我们正在开发一种将为多个客户端部署的产品。在这个产品的某个领域,我们需要执行一些公式。问题是,每个客户的公式可能不同。因此,我们需要有一个好的架构,可以"动态执行代码"

该应用程序是托管在sharepoint 2010上的web应用程序(因此使用.net 3.5)


简化示例:
我有一个类MyClassA,它有两个数字属性PropA和PropB对于一个客户来说,公式是PropA+PropB。另一个是道具A道具B。这只是一个简化的例子,因为公式比这个更复杂

我需要有一种方法,我们可以在XMl文件或数据库中设置客户端a的PropA+PropB。然后我会动态加载代码吗?

这有道理吗?有人在生产环境中实现过类似的场景吗?

我发现下面的文章描述了类似的情况,但我不知道它对于生产环境是否100%可靠:http://west-wind.com/presentations/dynamicCode/DynamicCode.htm

我还发现IronPython也可以解决类似的问题,但我不明白如何将ClassA与IronPython一起使用。

如有任何协助,我们将不胜感激。

更新。。。感谢大家的详细反馈。这是一次非常有建设性的演习。我已经回顾了不同的方法,我们很可能会继续采用nCalc方法。nCalc似乎是一个很棒的工具,我已经很喜欢这项技术了:)谢谢大家!!

动态代码-C#

查看nCache。

您可以将计算结果存储在数据库字段中,然后根据需要执行即可。相当简单和强大。我们在多租户环境中使用它来帮助进行类似类型的定制。

我之所以提出这个建议,是因为我不太了解这个问题,但这个想法可以是每个公式的Dll(这样你就可以随心所欲地处理代码,使用普通的C#功能,而不是不舒服的xml文件)。

有了MEF,你可以将dll注入到你的代码中(你只需要在开发新代码时上传这些dll,无需重新编译exe文件),并为每个客户端提供不同的公式。

这是我的想法,因为它看起来像是策略模式的完美示例

您是否有一组固定的公式,或者客户端是否有能力动态键入这些公式,例如计算器?在第一种情况下,我推荐以下内容:一组C#委托,它们以特定的顺序被调用/调用,以及(a)适合委托的闭包字典。然后,将根据预定义的条件将闭包分配给代理。

在另一种情况下,我不会根据客户端键入的内容编译.NET代码,因为这(除非被抢占)代表了服务器端的安全风险。我将为您期望的表达式实现/调整一个简单的解析器。

Chris Lively建议的p.S.nCalc对于这类任务来说绝对是一个可行的选择,如果你有很多不想保存在内存中的公式,它比直接使用代理要好。

ClassA与Ironpython?保持简单

运行每个成员的classA实例(可能是一个自定义属性来标记您想在计算中使用的属性),最后得到名称=值对,不幸的是,这看起来像是一个分配

例如

PropA = 100
PropB = 200

将其准备到您的python脚本中

PropAPropB = PropA + PropB

执行作为分配和计算的脚本

那么基本上就是

ClassB.PropAPropB = ipCalc.Eval("PropAPropB");

你可以开始变得非常聪明,但从一个实例获得输入的方法和一个评估计算和设置属性的结果的方法。

鲍勃是你妈妈姐姐的弟弟。。。