#.net-core #rule-engine
#.net-core #механизм правил
Вопрос:
Я использую пакет nuget Microsoft RulesEngine в своем проекте на основе .NET Core. Интересно, есть ли способ проверить формат выражения перед запуском RulesEngine.Execute
. Согласно файлу README, выражение является лямбда-выражением. Кроме того, существует определение схемы, которое можно использовать для проверки схемы корневого объекта (WorkflowRules), но это не будет проверять выражения, используемые в соответствии с Правилами.
Ответ №1:
Я нашел способ убедиться, что выражение действительно. В приведенном ниже коде, если возникает исключение, это означает, что выражение имеет недопустимый формат:
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
...
private bool Evaluate<TParameterType>(TParameterType fact, string rule)
{
var parameter = Expression.Parameter(typeof(TParameterType));
try
{
var lambdaExpression = DynamicExpressionParser.ParseLambda(new[] { parameter }, null, rule);
return (bool) lambdaExpression.Compile().DynamicInvoke(fact);
}
catch
{
return false;
}
}