Jez*_*ark 5 c# string execution
这是迄今为止的故事:
我正在做一个C#winforms应用程序,以方便指定租用报价的设备.
在其中,我有List<T>~1500个库存商品.
这些项目具有一个名为的属性AutospecQty,该属性具有get需要执行某些特定于每个项目的代码的访问者.此代码将引用列表中的各种其他项.
因此,例如,一个项目(让我们称之为Item0001)有这个get访问器,可能需要执行一些看起来像这样的代码:
[some code to get the following items from the list here]
if(Item0002.Value + Item0003.Value > Item0004.Value)
{ return Item0002.Value }
else
{ return Item0004.Value }
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但这些代码可能每周都会改变,所以我试图避免经常重新部署.此外,每个项目可能(将)具有完全不同的代码.有些人会查询列表,有些人会做一些长屁股数学函数,有些会像上面那样简单加法......有些将取决于列表中未包含的变量.
我想要做的是将每个项目的代码存储在我的数据库的表中,然后当应用程序启动时,只需将相关代码拉出并将其打包到列表中,随时可以执行.
我在internot上看到的关于执行字符串作为代码的大多数例子看起来都很冗长,令人费解,和/或不是特别新手编码器友好(我是一个完全的业余爱好者),并且似乎没有采取考虑被传递的变量.
所以问题是:
我猜这是一个非常危险的领域,无论我走哪条路.有人能告诉我,如果我打开一罐最好的蠕虫并真正关闭吗?
是否有更好的方式来处理这整件事?我有一个过度复杂的习惯,我试图踢它:P
与其他信息一样,autospec代码也不是用户输入的.这将是我每周更新它(没有其他人可以访问它),所以希望至少可以缓解一些安全问题.
如果我解释得很糟糕,请道歉.
提前致谢
一些需要考虑的选项:
1)如果你有一个良好的持续集成系统,可以自动构建和部署,那么每周部署会是一个问题吗?
2) 您是否考虑过使用 MEF 或类似的工具来替换包含新规则的单个 DLL?
3)如果公式可以简单地表达(不需要评估一些代码,例如A+B+C+D > E+F+G+H => J或K),您也许可以使用反射来收集参数值,然后应用它们。
4) 您可以使用.NET 4 中的表达式并从数据库构建表达式树,然后对其进行评估。
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |