Проверка выражения в Microsoft RulesEngine

#.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;
        }
    }