![]() |
1
5
你可以建立这样的自我。 可以使用type.getmembers()获取类的所有公共属性的列表。 但是,我不生成C代码,而是使用表达式树。 这样,当用户更改规则时,就不需要涉及C编译器。相反,您可以将规则存储在数据库中,在运行时加载它们,然后使用expression.compile()方法创建一个可以调用以运行代码的委托。 更新: 在评论中,有人问“表达式tres和特定于域的语言有什么区别?” 答案如下: 表达式树和特定于域的语言是正交的。 表达式tres只是表示C表达式的API,可以方便地在运行时动态转换为委托。 DSL,或特定于领域的语言,是一种程序设计语言,旨在解决一类狭小的问题。 它们本质上是完全不同的东西。 如果愿意,可以将表达式树用作DSL实现的一部分。Linq将其用于此目的。 但是,在您的情况下,您不需要DSL。您需要的是一个生成规则的用户界面(类似于Outlook的工作方式),然后是执行这些规则的方式。 创建UI只是正常的UI开发。 表达式树可以用来实现规则。 |
![]() |
2
0
这是一个鲜为人知的事实,Windows工作流基础设计器及其规则引擎尤其可以托管在与VisualStudio分离的Windows窗体应用程序中。以这种方式编写的规则也可以独立于实际的工作流进行评估。 见 WF Scenarios Guidance: Workflow Designer Re-Hosting 和 Tutorial: Hosting the WF Designer . |