Does anyone know of a good .NET library rules library (ideally open-source)? I need something that can do nested logic expressions, e.g., (A AND B) AND (B OR C OR D). I need to do comparisons of object properties, e.g., A.P1 AND B.P1. (Ideally, I could compare any property -- A.P1 AND B.P2).
It should store the rules in a database (I've got a lot of simple configurable logic). And it should have a rule creation/management API. The management tool would have to inspect the instances to determine which properties are available and which constraints exist.
Thanks!
Oh, one more thing. As a rules-engine, I need to include the concept of Actions (Commands). These are what execute when the expression returns:
If (expression.Evaluation) { actions.Execute(); }
So I see a rule as something like:
class Rule
{
Expression Exp;
Actions[] Actions;
Run()
{
if(Exp.Evaluate())
{
foreach(action in Actions)
{
action.Execute();
}
}
}
}
Agreeing with will I would say use something from the workflow engine family although not workflow. Examine System.Workflow.Activities.Rules Namespace a little bit - it's supported in .Net 3, and built into .Net3.5. You have everything in hand for free to use like you mentioned :
RuleCondition for conditions , RuleAction for actions
standardized format for describing metacode (CodeDom - CodeExpressions)
you can plugin any kind of complexity into that (to tell the truth except Linq and lambdas and so extension methods of some kind) via TypeProviders
there's a builtin editor for rule editing with intellisense
as the rule is serializable it can be easily persisted
For a starter : Using rules outside of a workflow
Ps.: we're using it extensively and there're much more in that namespace than you ever imagine -> a complete meta algorithm language
And the most important : it's easy to use - really