Ejemplo n.º 1
0
 /// <summary>
 /// Adds validation to property using the factory method to get the attribute
 /// Will call validation if other properties passed in are valid
 /// </summary>
 /// <typeparam name="TSource"></typeparam>
 /// <typeparam name="TProperty"></typeparam>
 /// <typeparam name="TValidationAttribute"></typeparam>
 /// <param name="propertyValidations"></param>
 /// <param name="factory"></param>
 /// <param name="properties"></param>
 /// <returns></returns>
 public static IPropertyValidations <TSource, TProperty> AddIfValid <TSource, TProperty, TValidationAttribute>(
     this IPropertyValidations <TSource, TProperty> propertyValidations,
     Func <TValidationAttribute> factory,
     params Expression <Func <TSource, object> >[] properties)
     where TValidationAttribute : ValidationAttribute
 {
     return(AddIfValid(propertyValidations, factory, null, properties));
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Adds a func/method to get called when this property is validated
 /// If the other properties pass in pass validation
 /// </summary>
 /// <typeparam name="TSource"></typeparam>
 /// <typeparam name="TProperty"></typeparam>
 /// <param name="propertyValidations"></param>
 /// <param name="validation"></param>
 /// <param name="properties"></param>
 /// <returns></returns>
 public static IPropertyValidations <TSource, TProperty> AddIfValid <TSource, TProperty>(
     this IPropertyValidations <TSource, TProperty> propertyValidations,
     Func <TProperty, TSource, ValidationContext, ValidationResult> validation,
     params Expression <Func <TSource, object> >[] properties)
 {
     // Chain down since you can't have a default and params
     return(AddIfValid(propertyValidations, validation, null, properties));
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Adds a func/method to get called when this property is validated
        /// </summary>
        /// <typeparam name="TSource"></typeparam>
        /// <typeparam name="TProperty"></typeparam>
        /// <param name="propertyValidations"></param>
        /// <param name="validation"></param>
        /// <param name="setter"></param>
        /// <returns></returns>
        public static IPropertyValidations <TSource, TProperty> Add <TSource, TProperty>(
            this IPropertyValidations <TSource, TProperty> propertyValidations,
            Func <TProperty, TSource, ValidationResult> validation,
            Action <ValidationAttribute> setter = null)
        {
            Func <TProperty, TSource, ValidationContext, ValidationResult> map =
                (property, source, _) => validation(property, source);

            return(Add(propertyValidations, map, setter));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Adds a func/method to get called when this property is validated
        /// If the other properties pass in pass validation
        /// </summary>
        /// <typeparam name="TSource"></typeparam>
        /// <typeparam name="TProperty"></typeparam>
        /// <param name="propertyValidations"></param>
        /// <param name="validation"></param>
        /// <param name="properties"></param>
        /// <returns></returns>
        public static IPropertyValidations <TSource, TProperty> AddIfValid <TSource, TProperty>(
            this IPropertyValidations <TSource, TProperty> propertyValidations,
            Func <TProperty, ValidationResult> validation,
            params Expression <Func <TSource, object> >[] properties)
        {
            Func <TProperty, TSource, ValidationContext, ValidationResult> map =
                (property, _, __) => validation(property);

            return(AddIfValid(propertyValidations, map, null, properties));
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Adds a func/method to get called when this property is validated
        /// If the other properties pass in pass validation
        /// </summary>
        /// <typeparam name="TSource"></typeparam>
        /// <typeparam name="TProperty"></typeparam>
        /// <param name="propertyValidations"></param>
        /// <param name="validation"></param>
        /// <param name="setter"></param>
        /// <param name="properties"></param>
        /// <returns></returns>
        public static IPropertyValidations <TSource, TProperty> AddIfValid <TSource, TProperty>(
            this IPropertyValidations <TSource, TProperty> propertyValidations,
            Func <TProperty, TSource, ValidationResult> validation,
            Action <ValidationAttribute> setter,
            params Expression <Func <TSource, object> >[] properties)
        {
            Func <TProperty, TSource, ValidationContext, ValidationResult> map =
                (property, source, _) => validation(property, source);

            return(AddIfValid(propertyValidations, map, setter, properties));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Adds a func/method to get called when this property is validated
        /// If the other properties pass in pass validation
        /// </summary>
        /// <typeparam name="TSource"></typeparam>
        /// <typeparam name="TProperty"></typeparam>
        /// <param name="propertyValidations"></param>
        /// <param name="validation"></param>
        /// <param name="properties"></param>
        /// <returns></returns>
        public static IPropertyValidations <TSource, TProperty> AddIfValid <TSource, TProperty>(
            this IPropertyValidations <TSource, TProperty> propertyValidations,
            Func <TProperty, TSource, ValidationResult> validation,
            params Expression <Func <TSource, object> >[] properties)
        {
            // chain down since can't have default and params
            Func <TProperty, TSource, ValidationContext, ValidationResult> map =
                (property, source, _) => validation(property, source);

            return(AddIfValid(propertyValidations, map, null, properties));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Adds validation attribute to the property using the factory func/method
        /// </summary>
        /// <typeparam name="TSource"></typeparam>
        /// <typeparam name="TProperty"></typeparam>
        /// <typeparam name="TValidationAttribute"></typeparam>
        /// <param name="propertyValidations"></param>
        /// <param name="factory"></param>
        /// <param name="setter"></param>
        /// <returns></returns>
        public static IPropertyValidations <TSource, TProperty> Add <TSource, TProperty, TValidationAttribute>(
            this IPropertyValidations <TSource, TProperty> propertyValidations,
            Func <TValidationAttribute> factory,
            Action <ValidationAttribute> setter = null)
            where TValidationAttribute : ValidationAttribute
        {
            var attribute = factory();

            setter?.Invoke(attribute);

            return(propertyValidations.Add(attribute));
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Adds a func/method to get called when this property is validated
        /// </summary>
        /// <typeparam name="TSource"></typeparam>
        /// <typeparam name="TProperty"></typeparam>
        /// <param name="propertyValidations"></param>
        /// <param name="validation"></param>
        /// <param name="setter"></param>
        /// <returns></returns>
        public static IPropertyValidations <TSource, TProperty> Add <TSource, TProperty>(
            this IPropertyValidations <TSource, TProperty> propertyValidations,
            Func <TProperty, TSource, ValidationContext, ValidationResult> validation,
            Action <ValidationAttribute> setter = null)
        {
            Func <object, ValidationContext, ValidationResult> map =
                (prop, context) => validation((TProperty)prop, (TSource)context.ObjectInstance, context);
            var attribute = new ValidatableObjectAttribute(map);

            setter?.Invoke(attribute);

            return(propertyValidations.Add(attribute));
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Adds validation to property using the factory method to get the attribute
        /// Will call validation if other properties passed in are valid
        /// </summary>
        /// <typeparam name="TSource"></typeparam>
        /// <typeparam name="TProperty"></typeparam>
        /// <typeparam name="TValidationAttribute"></typeparam>
        /// <param name="propertyValidations"></param>
        /// <param name="factory"></param>
        /// <param name="setter"></param>
        /// <param name="properties"></param>
        /// <returns></returns>
        public static IPropertyValidations <TSource, TProperty> AddIfValid <TSource, TProperty, TValidationAttribute>(
            this IPropertyValidations <TSource, TProperty> propertyValidations,
            Func <TValidationAttribute> factory,
            Action <ValidationAttribute> setter,
            params Expression <Func <TSource, object> >[] properties)
            where TValidationAttribute : ValidationAttribute
        {
            var attribute = factory();

            setter?.Invoke(attribute);

            var propsToValidate = properties.ToDictionary(p => p.NameOf(), p =>
            {
                var func = p.Compile();
                Func <object, object> convert = o => func((TSource)o);
                return(convert);
            });

            var validationAttribute = new ValidateIfAttribute(propsToValidate, attribute);

            return(propertyValidations.Add(validationAttribute));
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Adds a func/method to get called when this property is validated
        /// If the other properties pass in pass validation
        /// </summary>
        /// <typeparam name="TSource"></typeparam>
        /// <typeparam name="TProperty"></typeparam>
        /// <param name="propertyValidations"></param>
        /// <param name="validation"></param>
        /// <param name="setter"></param>
        /// <param name="properties"></param>
        /// <returns></returns>
        public static IPropertyValidations <TSource, TProperty> AddIfValid <TSource, TProperty>(
            this IPropertyValidations <TSource, TProperty> propertyValidations,
            Func <TProperty, TSource, ValidationContext, ValidationResult> validation,
            Action <ValidationAttribute> setter,
            params Expression <Func <TSource, object> >[] properties)
        {
            Func <object, ValidationContext, ValidationResult> map =
                (prop, context) => validation((TProperty)prop, (TSource)context.ObjectInstance, context);
            var attribute = new ValidatableObjectAttribute(map);

            setter?.Invoke(attribute);

            var propsToValidate = properties.ToDictionary(p => p.NameOf(), p =>
            {
                var func = p.Compile();
                Func <object, object> convert = o => func((TSource)o);
                return(convert);
            });

            var validationAttribute = new ValidateIfAttribute(propsToValidate, attribute);

            return(propertyValidations.Add(validationAttribute));
        }