Ejemplo n.º 1
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.º 2
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.º 3
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.º 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="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));
        }