如何构建可以在C#.net中执行用户定义的if else规则的规则引擎

时间:2009-04-21 09:40:59

标签: c# .net rule-engine

我要求构建新的规则引擎,其中我有这样的规则,以表格格式存储在Excel工作表中。

<If>  "Name = Nita "
<Value> "200"
<else> "Name = Gita"
<value> "300"
<LookInto> "/Name/@Income"

我有两个文件说1 n 2.我需要在第一个文件中看到Name是Nita还是Gita。根据执行情况,我将获得价值。现在这个结果值我需要与第二个文件进行比较,第二个文件是一个xml文件,其路径已被定义。

任何人都可以告诉我C#中有什么可以有效地用来开发相同的东西,或者任何人都可以建议我如何使用C#来实现这个目标。我需要一些关于类设计的想法。< / p>

我正在使用.Net 1.1。

4 个答案:

答案 0 :(得分:4)

首先,您需要创建可以定义规则的类。一旦你有了这个结构,你就可以构建一个利用这些类的引擎。

我会考虑创建类似的东西:

class RuleEngine 
{
  public RuleMatch[] RuleMatches { get; set; }
  public void RunEngine(inputdata...) 
  {  
    // do processing in here
  }
}

class RuleMatch 
{
  public Rule[] Rules { get; set; }
  public Object ValueIfMatched { get; set; }
}

class Rule 
{
  public String FieldName { get; set; }
  public MatchType Match { get; set; }
  public Object Value { get; set; }
)

enum MatchType 
{
  Equal = 1,
  NotEqual = 2,
  GreaterThan = 4,
  LessThan = 8,
  Like = 16
}

然后从那里继续......

如果将此结构更改为可以添加到一组规则中的一组规则,例如(a AND b)或(c AND d),则此结构会更好 - 我会留给您现在想想。


请注意我在这里使用了一些C#3.0构造,你需要在1.1中创建完整的私有属性。

答案 1 :(得分:0)

您可以使用boo创建DSL,但我不知道这是否适用于1.1

答案 2 :(得分:0)

你将受到.NET 1.1的限制。我认为你的第一步将是升级。

后续步骤可能涉及Windows Workflow Foundation内置的规则引擎;该引擎以及与之相关的图形设计人员可以在WF之外使用。

另一件需要考虑的是验证应用程序块,它是Microsoft Enterprise Library的一部分。

六年前,当.NET 1.1统治地球时,这些事情都不存在。

答案 3 :(得分:0)

或者你可以让其他人做这项工作并使用一个好的.NET规则引擎,如InRule Technology的产品,.Net的IBM / ILOG规则或.Net的Blaze Advisor。它们运行良好,并将在.Net

中为您提供强大的规则环境