public ITargetTypeExpression <TMessage, TCommand> Rule <T>() where T : IValidationRule { var instance = new ValidationRuleInstance { ValidationRuleType = typeof(T) }; _instances.Add(instance); return(ForMessage()); }
public ITargetTypeExpression <TMessage, TCommand> Rule <T>(Expression <Func <TCommand, object> > toCheck) where T : IValidationRule { var instance = new ValidationRuleInstance { ValidationRuleType = typeof(T), ToCheckExpression = toCheck }; FillUIExpression(toCheck, instance); _instances.Add(instance); instance.ArrayRule = toCheck.IsArray(); return(this); }
public ITargetTypeExpression <TMessage, TCommand> Rule <T>(Expression <Func <TCommand, object> > toCheck, Expression <Func <TCommand, object> > toCompare) where T : ICrossReferencedValidationRule { var instance = new ValidationRuleInstance { ValidationRuleType = typeof(T), ToCheckExpression = toCheck, ToCompareExpression = toCompare }; FillUIExpression(toCompare, instance); _instances.Add(instance); return(this); }
private static void FillUIExpression <TTarget>(Expression <Func <TCommand, TTarget> > toCheck, ValidationRuleInstance instance) { var member = toCheck.GetMember(); if (member == null) { return; } var destinationMember = typeof(TMessage).GetProperty(member.Name); if (destinationMember == null) { return; } if ((member.GetMemberType() == typeof(DateTime?)) && (typeof(IDateAndTime).IsAssignableFrom(destinationMember.PropertyType))) { var dateProperty = destinationMember.PropertyType.GetProperty("Date", BindingFlags.Public | BindingFlags.Instance); var instanceParameter = Expression.Parameter(typeof(TMessage), "target"); var memberExpr = Expression.Property(instanceParameter, destinationMember); var dateGetterExpression = Expression.Property(memberExpr, dateProperty); var lambda = Expression.Lambda <Func <TMessage, object> >(dateGetterExpression, instanceParameter); instance.UIAttributeExpression = lambda; } else { var instanceParameter = Expression.Parameter(typeof(TMessage), "target"); var memberExpr = Expression.Property(instanceParameter, destinationMember); var lambda = Expression.Lambda <Func <TMessage, object> >(Expression.Convert(memberExpr, typeof(object)), instanceParameter); instance.UIAttributeExpression = lambda; } }
private static void FillUIExpression(Expression <Func <TCommand, object> > toCheck, ValidationRuleInstance instance) { FillUIExpression <object>(toCheck, instance); }