示例#1
0
        private void Add <TProperty>(
            string groupName,
            Expression <Func <TModel, TProperty> > property,
            LambdaExpression rule,
            LambdaExpression enabled,
            DryvRuleLocation ruleLocation)
        {
            var ruleDefinition = DryvCompiledRule.Create(property, rule, enabled, ruleLocation, groupName);

            this.PropertyRules.Add(ruleDefinition);
        }
示例#2
0
        private void Disable <TProperty>(
            Expression <Func <TModel, TProperty> > property,
            LambdaExpression rule,
            LambdaExpression enabled,
            DryvRuleLocation ruleLocation)
        {
            var ruleDefinition = DryvCompiledRule.Create(property, rule, enabled, ruleLocation, null);

            ruleDefinition.IsDisablingRule = true;

            this.DisablingRules.Add(ruleDefinition);
        }
示例#3
0
        public static DryvCompiledRule Create <TModel, TProperty>(Expression <Func <TModel, TProperty> > property, LambdaExpression rule, LambdaExpression enabled, DryvRuleLocation ruleLocation, string groupName)
        {
            if (!(property.Body is MemberExpression memberExpression) ||
                !(memberExpression.Member is PropertyInfo propertyInfo))
            {
                return(null);
            }

            var members = memberExpression
                          .Iterrate(e => e.Expression as MemberExpression)
                          .ToList();

            var parameter = (ParameterExpression)members.Last().Expression;

            var modelPath = string.Join(".", members
                                        .Skip(1)
                                        .Select(e => e.Member.Name.ToCamelCase())
                                        .Reverse());

            return(new DryvCompiledRule
            {
                EnablingExpression = enabled,
                EvaluationLocation = ruleLocation,
                GroupName = groupName,
                ModelPath = modelPath,
                ModelType = parameter.Type,
                Property = propertyInfo,
                PropertyExpression = memberExpression,
                ValidationExpression = rule,
            });
        }