コード例 #1
0
        private RuleExpressionParameter[] GetRuleExpressionParameters(RuleExpressionType ruleExpressionType, IEnumerable <ScopedParam> localParams, RuleParameter[] ruleParams)
        {
            if (!_reSettings.EnableScopedParams)
            {
                return(new RuleExpressionParameter[] { });
            }
            var ruleExpParams = new List <RuleExpressionParameter>();

            if (localParams?.Any() == true)
            {
                var parameters = ruleParams.Select(c => c.ParameterExpression)
                                 .ToList();

                var expressionBuilder = GetExpressionBuilder(ruleExpressionType);

                foreach (var lp in localParams)
                {
                    var lpExpression = expressionBuilder.Parse(lp.Expression, parameters.ToArray(), null).Body;
                    var ruleExpParam = new RuleExpressionParameter()
                    {
                        ParameterExpression = Expression.Parameter(lpExpression.Type, lp.Name),
                        ValueExpression     = lpExpression
                    };
                    parameters.Add(ruleExpParam.ParameterExpression);
                    ruleExpParams.Add(ruleExpParam);
                }
            }
            return(ruleExpParams.ToArray());
        }
コード例 #2
0
ファイル: RuleCompiler.cs プロジェクト: qifei2012/RulesEngine
        private RuleFunc <RuleResultTree> GetWrappedRuleFunc(RuleExpressionType ruleExpressionType, RuleFunc <RuleResultTree> ruleFunc, RuleParameter[] ruleParameters, RuleExpressionParameter[] ruleExpParams)
        {
            if (ruleExpParams.Length == 0)
            {
                return(ruleFunc);
            }
            var paramDelegate = GetExpressionBuilder(ruleExpressionType).CompileScopedParams(ruleParameters, ruleExpParams);

            return((ruleParams) => {
                var inputs = ruleParams.Select(c => c.Value).ToArray();
                var scopedParamsDict = paramDelegate(inputs);
                var scopedParams = scopedParamsDict.Select(c => new RuleParameter(c.Key, c.Value)).ToList();
                var extendedInputs = ruleParams.Concat(scopedParams);
                var result = ruleFunc(extendedInputs.ToArray());
                // To be removed in next major release
#pragma warning disable CS0618 // Type or member is obsolete
                if (result.RuleEvaluatedParams == null)
                {
                    result.RuleEvaluatedParams = scopedParams;
                }
#pragma warning restore CS0618 // Type or member is obsolete

                return result;
            });
        }
コード例 #3
0
        public void RuleGetExpressionBuilderTest(RuleExpressionType expressionType, Type expectedExpressionBuilderType)
        {
            var objBuilderFactory = new RuleExpressionBuilderFactory(new ReSettings());
            var builder           = objBuilderFactory.RuleGetExpressionBuilder(expressionType);

            var builderType = builder.GetType();

            Assert.Equal(expectedExpressionBuilderType.ToString(), builderType.ToString());
        }
コード例 #4
0
        public RuleExpressionBuilderBase RuleGetExpressionBuilder(RuleExpressionType ruleExpressionType)
        {
            switch (ruleExpressionType)
            {
            case RuleExpressionType.LambdaExpression:
                return(new LambdaExpressionBuilder(_reSettings));

            default:
                throw new InvalidOperationException($"{nameof(ruleExpressionType)} has not been supported yet.");
            }
        }
コード例 #5
0
 private RuleExpressionBuilderBase GetExpressionBuilder(RuleExpressionType expressionType)
 {
     return(_expressionBuilderFactory.RuleGetExpressionBuilder(expressionType));
 }