/// <summary>
		/// Builds a validator selector from the options specified in the attribute's properties.
		/// </summary>
		public IValidatorSelector ToValidatorSelector() {
			IValidatorSelector selector;

			if(! string.IsNullOrEmpty(RuleSet)) {
				var rulesets = RuleSet.Split(',', ';');
				selector = new RulesetValidatorSelector(rulesets);
			}
			else if(! string.IsNullOrEmpty(Properties)) {
				var properties = Properties.Split(',', ';');
				selector = new MemberNameValidatorSelector(properties);
			}
			else {
				selector = new DefaultValidatorSelector();
			}

			return selector;

		}
Beispiel #2
0
        /// <summary>
        /// Builds a validator selector from the options specified in the attribute's properties.
        /// </summary>
        public IValidatorSelector ToValidatorSelector()
        {
            IValidatorSelector selector;

            if (!string.IsNullOrEmpty(RuleSet))
            {
                var rulesets = RuleSet.Split(',', ';');
                selector = new RulesetValidatorSelector(rulesets);
            }
            else if (!string.IsNullOrEmpty(Properties))
            {
                var properties = Properties.Split(',', ';');
                selector = new MemberNameValidatorSelector(properties);
            }
            else
            {
                selector = new DefaultValidatorSelector();
            }

            return(selector);
        }
Beispiel #3
0
        /// <summary>
        /// Attempts to validate a single field or property of a form model or child object model.
        /// </summary>
        /// <param name="validator"></param>
        /// <param name="editContext"></param>
        /// <param name="fieldIdentifier"></param>
        /// <returns></returns>
        private async Task <ValidationResult> TryValidateField(IValidator validator, EditContext editContext, FieldIdentifier fieldIdentifier)
        {
            try
            {
                var vselector = new MemberNameValidatorSelector(new[] { fieldIdentifier.FieldName });
                var vctx      = CreateValidationContext(fieldIdentifier.Model, validatorSelector: vselector);
                return(await validator.ValidateAsync(vctx));
            }
            catch (Exception ex)
            {
                var msg = $"An unhandled exception occurred when validating field name: '{fieldIdentifier.FieldName}'";

                if (editContext.Model != fieldIdentifier.Model)
                {
                    msg += $" of a child object of type: {fieldIdentifier.Model.GetType()}";
                }

                msg += $" of <EditForm> model type: '{editContext.Model.GetType()}'";
                throw new UnhandledValidationException(msg, ex);
            }
        }
        public static ValidationResult Validate <T>(this IValidator <T> validator, T instance, IValidatorSelector selector = null, string ruleSet = null, string[] properties = null)
        {
            if (selector != null && ruleSet != null)
            {
                throw new InvalidOperationException("Cannot specify both an IValidatorSelector and a RuleSet.");
            }

            if (selector != null && properties != null)
            {
                throw new InvalidOperationException("Cannot specify both an IValidatorSelector and properties to include.");
            }

            if (properties != null && ruleSet != null)
            {
                throw new InvalidOperationException("Cannot specify both properties to include and a RuleSet.");
            }

            if (selector == null)
            {
                selector = new DefaultValidatorSelector();
            }

            if (properties != null)
            {
                selector = new MemberNameValidatorSelector(properties);
            }

            if (ruleSet != null)
            {
                selector = new RulesetValidatorSelector(ruleSet);
            }

            var context = new ValidationContext <T>(instance, new PropertyChain(), selector);

            return(validator.Validate(context));
        }
Beispiel #5
0
        /// <summary>
        /// 验证对象数据,可指定验证某些属性
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="validator"></param>
        /// <param name="instance"></param>
        /// <param name="propertyExpressions"></param>
        /// <returns></returns>
        public ValidationResult Validate <TEntity>(IDatabase database, TEntity instance, params Expression <Func <TEntity, object> >[] propertyExpressions)
        {
            ValidInstance(instance, false);

            var selector = ValidatorOptions.ValidatorSelectors.MemberNameValidatorSelectorFactory(MemberNameValidatorSelector.MemberNamesFromExpressions(propertyExpressions));
            var context  = new ValidationContext <TEntity>(database, instance, new PropertyChain(), selector);

            return(ValidateInternal(context));
        }
        /// <summary>
        /// Validates certain properties of the specified instance.
        /// </summary>
        /// <param name="validator">The current validator</param>
        /// <param name="instance">The object to validate</param>
        /// <param name="propertyExpressions">Expressions to specify the properties to validate</param>
        /// <returns>A ValidationResult object containing any validation failures</returns>
        public static ValidationResult Validate <T>(this IValidator <T> validator, T instance, params Expression <Func <T, object> >[] propertyExpressions)
        {
            var context = new ValidationContext <T>(instance, new PropertyChain(), MemberNameValidatorSelector.FromExpressions(propertyExpressions));

            return(validator.Validate(context));
        }
 public void MemberNameValidatorSelector_returns_true_when_property_name_matches()
 {
     var selector = new MemberNameValidatorSelector(new[] { "SomeProperty" });
     var rule = CreateRule(x => x.SomeProperty);
     selector.CanExecute(rule, "SomeProperty").ShouldBeTrue();
 }
 public void MemberNameValidatorSelector_returns_false_when_property_name_does_not_match()
 {
     var selector = new MemberNameValidatorSelector(new[] { "SomeProperty" });
     var rule = CreateRule(x => x.SomeOtherProperty);
     selector.CanExecute(rule, "SomeOtherProperty").ShouldBeFalse();
 }
Beispiel #9
0
        /// <summary>
        /// Validates certain properties of the specified instance asynchronously.
        /// </summary>
        /// <param name="validator">The current validator</param>
        /// <param name="instance">The object to validate</param>
        /// <param name="cancellationToken"></param>
        /// <param name="properties">Expressions to specify the properties to validate</param>
        public static void Validate <T> (this IReactiveValidator <T> validator, T instance, CancellationToken cancellationToken = default, params Expression <Func <T, object?> > [] properties) where T : class
        {
            var selector = ValidatorOptions.Global.ValidatorSelectors.MemberNameValidatorSelectorFactory(MemberNameValidatorSelector.MemberNamesFromExpressions(properties));
            var context  = new ValidationContext <T> (instance, new PropertyChain( ), selector);

            validator.Validate(context, cancellationToken);
        }