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); }
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); }
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, }); }