https://microsoft.github.io/RulesEngine
Command Line
- Open directory source\RulesEngineService in command line and execute dotnet run.
- Open https://localhost:5000.
Visual Studio Code
- Open source directory in Visual Studio Code.
- Press F5.
Visual Studio
- Open source\RulesEngineService.sln in Visual Studio.
- Set RulesEngineService as startup project.
- Press F5.
[
{
"WorkflowName": "DiscountPercentage",
"GlobalParams": [
{
"Name": "CompareValue",
"Expression": "1000"
}
],
"Rules": [
{
"RuleName": "CreditCard",
"Expression": "PaymentType == \"CreditCard\"",
"SuccessEvent": "5"
},
{
"RuleName": "DebitCard",
"Expression": "PaymentType == \"DebitCard\"",
"SuccessEvent": "10"
},
{
"RuleName": "CashLessThan",
"Expression": "PaymentType == \"Cash\" && Value < CompareValue",
"SuccessEvent": "15"
},
{
"RuleName": "CashGreaterThanOrEqual",
"Expression": "PaymentType == \"Cash\" && Value >= CompareValue",
"SuccessEvent": "20"
}
]
}
]
var json = System.IO.File.ReadAllText("Rules.json");
var workflows = JsonSerializer.Deserialize<Workflow[]>(json);
var rulesEngine = new RulesEngine.RulesEngine(workflows);
var parameters = new RuleParameter[]
{
new RuleParameter("PaymentType", "Cash"),
new RuleParameter("Value", 1000)
};
var result = await rulesEngine.ExecuteAllRulesAsync(workflows.First().WorkflowName, parameters);
[
{
"rule": {
"ruleName": "CreditCard",
"expression": "PaymentType == \"CreditCard\"",
"successEvent": "5"
},
"isSuccess": false,
"inputs": {
"PaymentType": "Cash",
"Value": 1000,
"CompareValue": 1000
}
},
{
"rule": {
"ruleName": "DebitCard",
"expression": "PaymentType == \"DebitCard\"",
"successEvent": "10"
},
"isSuccess": false,
"inputs": {
"PaymentType": "Cash",
"Value": 1000,
"CompareValue": 1000
}
},
{
"rule": {
"ruleName": "CashLessThan",
"expression": "PaymentType == \"Cash\" && Value < CompareValue",
"successEvent": "15"
},
"isSuccess": false,
"inputs": {
"PaymentType": "Cash",
"Value": 1000,
"CompareValue": 1000
}
},
{
"rule": {
"ruleName": "CashGreaterThanOrEqual",
"expression": "PaymentType == \"Cash\" && Value >= CompareValue",
"successEvent": "20"
},
"isSuccess": true,
"inputs": {
"PaymentType": "Cash",
"Value": 1000,
"CompareValue": 1000
}
}
]
var value = result.SingleOrDefault(rule => rule.IsSuccess)?.Rule.SuccessEvent; // 20