Skip to content

Upgrading FluentValidation 7 to 8

Breaking7.6.105 → 8.6.3Breaking5Platform2Deprecated2New21Changed14Fixed17Other1

BreakingUpgrade verdict

5 breaking changes and 2 platform requirement changes.

  • Removes the pre-7 version of `Custom`/`CustomAsync`.
  • Removes the deprecated localization system.
  • Removes deprecated `RemoveRule`/`ReplaceRule`/`ClearRules` methods.
  • If you use attribute-based validators you must install an extra package.
Top 5 of 9 that need code or config changes
Breaking5
Removes the pre-7 version of Custom/CustomAsync.
CustomCustomAsync
Removes the deprecated localization system.
Removes deprecated RemoveRule/ReplaceRule/ClearRules methods.
RemoveRuleReplaceRuleClearRules
Moves the AttributedValidatorFactory into a separate package.
AttributedValidatorFactory
IStringSource.GetString now takes a context.
IStringSource.GetString
Platform2
Adds support for ASP.NET Core 3.1.
Adds support for ASP.NET Core 3.
Deprecated2
Marks DelegatingValidator as deprecated.
DelegatingValidator
Deprecates SetCollectionValidator in favour of RuleForEach().SetValidator.
SetCollectionValidatorRuleForEachSetValidator

Generated by DepDelta from published .NET assemblies. Not mixed with prose notes.

  • removed: delegate InlineValidator.InlineRuleCreator<TProperty>(InlineValidator<T> validator): IRuleBuilderOptions<T, TProperty>
  • removed: interface IParameterValidatorFactory
  • removed: method AbstractValidator.Custom(Func<T, ValidationContext<T>, ValidationFailure> customValidator): void
  • removed: method AbstractValidator.Custom(Func<T, ValidationFailure> customValidator): void
  • removed: method AbstractValidator.CustomAsync(Func<T, Task<ValidationFailure>> customValidator): void
  • removed: method AbstractValidator.CustomAsync(Func<T, ValidationContext<T>, CancellationToken, Task<ValidationFailure>> customValidator): void
  • removed: method AbstractValidator.UnlessAsync(Func<T, Task<bool>> predicate, Action action): void
  • removed: method AbstractValidator.WhenAsync(Func<T, Task<bool>> predicate, Action action): void
  • removed: method IParameterValidatorFactory.GetValidator(ParameterInfo parameterInfo): IValidator
  • removed: static class BackwardsCompatibilityExtensions
  • removed: static field ValidatorOptions.ResourceProviderType: Type
  • removed: static method BackwardsCompatibilityExtensions.ClearRules<T>(IValidator<T> validators, Expression<Func<T, object>> expression): void
  • removed: static method BackwardsCompatibilityExtensions.RemoveRule<T>(IValidator<T> validators, Expression<Func<T, object>> expression, Type oldValidatorType): void
  • removed: static method BackwardsCompatibilityExtensions.ReplaceRule<T>(IValidator<T> validators, Expression<Func<T, object>> expression, IPropertyValidator newValidator): void
  • removed: static method BackwardsCompatibilityExtensions.WithLocalizedMessage<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Expression<Func<string>> resourceSelector): IRuleBuilderOptions<T, TProperty>
  • removed: static method BackwardsCompatibilityExtensions.WithLocalizedMessage<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Expression<Func<string>> resourceSelector, Func<T, object>[] formatArgs): IRuleBuilderOptions<T, TProperty>
  • removed: static method BackwardsCompatibilityExtensions.WithLocalizedMessage<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Expression<Func<string>> resourceSelector, IResourceAccessorBuilder resourceAccessorBuilder): IRuleBuilderOptions<T, TProperty>
  • removed: static method BackwardsCompatibilityExtensions.WithLocalizedMessage<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Expression<Func<string>> resourceSelector, object[] formatArgs): IRuleBuilderOptions<T, TProperty>
  • removed: static method BackwardsCompatibilityExtensions.WithLocalizedMessage<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Type resourceType, string resourceName, Func<T, object>[] formatArgs): IRuleBuilderOptions<T, TProperty>
  • removed: static method BackwardsCompatibilityExtensions.WithLocalizedMessage<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Type resourceType, string resourceName, object[] formatArgs): IRuleBuilderOptions<T, TProperty>
  • removed: static method BackwardsCompatibilityExtensions.WithLocalizedName<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Expression<Func<string>> resourceSelector, IResourceAccessorBuilder resourceAccessorBuilder = …): IRuleBuilderOptions<T, TProperty>
  • removed: static method BackwardsCompatibilityExtensions.WithLocalizedName<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Type resourceType, string resourceName): IRuleBuilderOptions<T, TProperty>
  • removed: static method BackwardsCompatibilityExtensions.WithMessage<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, string errorMessage, Func<T, TProperty, object>[] funcs): IRuleBuilderOptions<T, TProperty>
  • removed: static method BackwardsCompatibilityExtensions.WithMessage<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, string errorMessage, Func<T, object>[] funcs): IRuleBuilderOptions<T, TProperty>
  • removed: static method BackwardsCompatibilityExtensions.WithMessage<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, string errorMessage, object[] formatArgs): IRuleBuilderOptions<T, TProperty>
  • removed: static method BackwardsCompatibilityExtensions.WithPropertyName<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, string propertyName): IRuleBuilderOptions<T, TProperty>
  • removed: static method DefaultValidatorOptions.DependentRules<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Action<InlineValidator<T>> action): IRuleBuilderOptions<T, TProperty>
  • removed: static method DefaultValidatorOptions.UnlessAsync<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Func<T, Task<bool>> predicate, ApplyConditionTo applyConditionTo = …): IRuleBuilderOptions<T, TProperty>
  • removed: static method DefaultValidatorOptions.WhenAsync<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Func<T, Task<bool>> predicate, ApplyConditionTo applyConditionTo = …): IRuleBuilderOptions<T, TProperty>
  • changed: class ValidationContext → class ValidationContext implements IValidationContext
  • changed: method AbstractValidator.AddRule(IValidationRule rule): void → protected method AbstractValidator.AddRule(IValidationRule rule): void
  • changed: method AbstractValidator.RuleForEach<TProperty>(Expression<Func<T, IEnumerable<TProperty>>> expression): IRuleBuilderInitial<T, TProperty> → method AbstractValidator.RuleForEach<TProperty>(Expression<Func<T, IEnumerable<TProperty>>> expression): IRuleBuilderInitialCollection<T, TProperty>
  • changed: method AbstractValidator.Unless(Func<T, bool> predicate, Action action): void → method AbstractValidator.Unless(Func<T, bool> predicate, Action action): IConditionBuilder
  • changed: method AbstractValidator.UnlessAsync(Func<T, CancellationToken, Task<bool>> predicate, Action action): void → method AbstractValidator.UnlessAsync(Func<T, CancellationToken, Task<bool>> predicate, Action action): IConditionBuilder
  • changed: method AbstractValidator.When(Func<T, bool> predicate, Action action): void → method AbstractValidator.When(Func<T, bool> predicate, Action action): IConditionBuilder
  • changed: method AbstractValidator.WhenAsync(Func<T, CancellationToken, Task<bool>> predicate, Action action): void → method AbstractValidator.WhenAsync(Func<T, CancellationToken, Task<bool>> predicate, Action action): IConditionBuilder
  • changed: method IRuleBuilder.SetValidator(IValidator<TProperty> validator): IRuleBuilderOptions<T, TProperty> → method IRuleBuilder.SetValidator(IValidator<TProperty> validator, string[] ruleSets): IRuleBuilderOptions<T, TProperty>
  • changed: method IRuleBuilder.SetValidator<TValidator>(Func<T, TValidator> validatorProvider): IRuleBuilderOptions<T, TProperty> → method IRuleBuilder.SetValidator<TValidator>(Func<T, TValidator> validatorProvider, string[] ruleSets): IRuleBuilderOptions<T, TProperty>
  • changed: method IValidationRule.ApplyAsyncCondition(Func<ValidationContext, CancellationToken, Task<bool>> predicate, ApplyConditionTo applyConditionTo = …): void → method IValidationRule.ApplyAsyncCondition(Func<PropertyValidatorContext, CancellationToken, Task<bool>> predicate, ApplyConditionTo applyConditionTo = …): void
  • changed: method IValidationRule.ApplyCondition(Func<ValidationContext, bool> predicate, ApplyConditionTo applyConditionTo = …): void → method IValidationRule.ApplyCondition(Func<PropertyValidatorContext, bool> predicate, ApplyConditionTo applyConditionTo = …): void
  • changed: method InlineValidator.Add<TProperty>(InlineValidator.InlineRuleCreator<T, TProperty> ruleCreator): void → method InlineValidator.Add<TProperty>(Func<InlineValidator<T>, IRuleBuilderOptions<T, TProperty>> ruleCreator): void
  • changed: method ValidationContext.CloneForChildCollectionValidator(object instanceToValidate): ValidationContext → method ValidationContext.CloneForChildCollectionValidator(object instanceToValidate, bool preserveParentContext = …): ValidationContext
  • changed: method ValidationContext.CloneForChildValidator(object instanceToValidate): ValidationContext → method ValidationContext.CloneForChildValidator(object instanceToValidate, bool preserveParentContext = …, IValidatorSelector selector = …): ValidationContext
  • changed: property ValidationContext.RootContextData: Dictionary<string, object> { get; } → property ValidationContext.RootContextData: IDictionary<string, object> { get; }
  • changed: static method DefaultValidatorOptions.OverridePropertyName<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Expression<Func<T, TProperty>> expr): IRuleBuilderOptions<T, TProperty> → static method DefaultValidatorOptions.OverridePropertyName<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Expression<Func<T, object>> expr): IRuleBuilderOptions<T, TProperty>
  • added: class PropertyValidatorOptions
  • added: ctor PropertyValidatorOptions()
  • added: interface IConditionBuilder
  • added: interface IRuleBuilderInitialCollection<T, TElement> extends IConfigurable<CollectionPropertyRule<TElement>, IRuleBuilderInitialCollection<T, TElement>>, IRuleBuilder<T, TElement>
  • added: interface IValidationContext
  • added: method IConditionBuilder.Otherwise(Action action): void
  • added: method PropertyValidatorOptions.ApplyAsyncCondition(Func<PropertyValidatorContext, CancellationToken, Task<bool>> condition): void
  • added: method PropertyValidatorOptions.ApplyCondition(Func<PropertyValidatorContext, bool> condition): void
  • added: property IValidationContext.InstanceToValidate: object { get; }
  • added: property IValidationContext.ParentContext: IValidationContext { get; }
  • added: property IValidationContext.PropertyValue: object { get; }
  • added: property PropertyValidatorOptions.AsyncCondition: Func<PropertyValidatorContext, CancellationToken, Task<bool>> { get; }
  • added: property PropertyValidatorOptions.Condition: Func<PropertyValidatorContext, bool> { get; }
  • added: property PropertyValidatorOptions.CustomStateProvider: Func<PropertyValidatorContext, object> { get; set; }
  • added: property PropertyValidatorOptions.ErrorCodeSource: IStringSource { get; set; }
  • added: property PropertyValidatorOptions.ErrorMessageSource: IStringSource { get; set; }
  • added: property PropertyValidatorOptions.Severity: Severity { get; set; }
  • added: static method AssemblyScanner.FindValidatorsInAssemblyContaining(Type type): AssemblyScanner
  • added: static method DefaultValidatorExtensions.ChildRules<T, TProperty>(IRuleBuilder<T, TProperty> ruleBuilder, Action<InlineValidator<TProperty>> action): IRuleBuilderOptions<T, TProperty>
  • added: static method DefaultValidatorExtensions.EmailAddress<T>(IRuleBuilder<T, string> ruleBuilder, EmailValidationMode mode): IRuleBuilderOptions<T, string>
  • added: static method DefaultValidatorExtensions.ForEach<T, TElement>(IRuleBuilder<T, IEnumerable<TElement>> ruleBuilder, Action<IRuleBuilderInitialCollection<IEnumerable<TElement>, TElement>> action): IRuleBuilderOptions<T, IEnumerable<TElement>>
  • added: static method DefaultValidatorExtensions.IsEnumName<T>(IRuleBuilder<T, string> ruleBuilder, Type enumType, bool caseSensitive = …): IRuleBuilderOptions<T, string>
  • added: static method DefaultValidatorExtensions.ScalePrecision<T, TProperty>(IRuleBuilder<T, TProperty> ruleBuilder, int scale, int precision, bool ignoreTrailingZeros = …): IRuleBuilderOptions<T, TProperty>
  • added: static method DefaultValidatorOptions.Cascade<T, TProperty>(IRuleBuilderInitialCollection<T, TProperty> ruleBuilder, CascadeMode cascadeMode): IRuleBuilderInitialCollection<T, TProperty>
  • added: static method DefaultValidatorOptions.OnFailure<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Action<T, PropertyValidatorContext, string> onFailure): IRuleBuilderOptions<T, TProperty>
  • added: static method DefaultValidatorOptions.OnFailure<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Action<T, PropertyValidatorContext> onFailure): IRuleBuilderOptions<T, TProperty>
  • added: static method DefaultValidatorOptions.OnFailure<T, TProperty>(IRuleBuilderOptions<T, TProperty> rule, Action<T> onFailure): IRuleBuilderOptions<T, TProperty>
  • added: static method DefaultValidatorOptions.OverrideIndexer<T, TCollectionElement>(IRuleBuilderInitialCollection<T, TCollectionElement> rule, Func<T, IEnumerable<TCollectionElement>, TCollectionElement, int, string> callback): IRuleBuilderInitialCollection<T, TCollectionElement>
  • added: static method DefaultValidatorOptions.Transform<T, TProperty>(IRuleBuilderInitialCollection<T, TProperty> ruleBuilder, Func<TProperty, TProperty> transformationFunc): IRuleBuilderInitialCollection<T, TProperty>
  • added: static method DefaultValidatorOptions.Where<T, TCollectionElement>(IRuleBuilderInitialCollection<T, TCollectionElement> rule, Func<TCollectionElement, bool> predicate): IRuleBuilderInitialCollection<T, TCollectionElement>
  • added: static method ValidationContext.GetFromNoNGenericContext(ValidationContext context): ValidationContext<T>
  • removed: class AttributedValidatorFactory implements IParameterValidatorFactory, IValidatorFactory
  • removed: class ValidatorAttribute extends Attribute
  • removed: ctor AttributedValidatorFactory()
  • removed: ctor AttributedValidatorFactory(Func<Type, IValidator> instanceFactory)
  • removed: ctor ValidatorAttribute(Type validatorType)
  • removed: method AttributedValidatorFactory.GetValidator(ParameterInfo parameterInfo): IValidator
  • removed: method AttributedValidatorFactory.GetValidator(Type type): IValidator
  • removed: method AttributedValidatorFactory.GetValidator<T>(): IValidator<T>
  • removed: property ValidatorAttribute.ValidatorType: Type { get; }
  • removed: class DelegateValidator<T> implements IValidationRule
  • removed: ctor DelegateValidator(Func<T, IEnumerable<ValidationFailure>> func)
  • removed: ctor DelegateValidator(Func<T, Task<IEnumerable<ValidationFailure>>> asyncFunc)
  • removed: ctor DelegateValidator(Func<T, ValidationContext<T>, CancellationToken, Task<IEnumerable<ValidationFailure>>> asyncFunc)
  • removed: ctor DelegateValidator(Func<T, ValidationContext<T>, IEnumerable<ValidationFailure>> func)
  • removed: method DelegateValidator.ApplyAsyncCondition(Func<ValidationContext, CancellationToken, Task<bool>> predicate, ApplyConditionTo applyConditionTo = …): void
  • removed: method DelegateValidator.ApplyCondition(Func<ValidationContext, bool> predicate, ApplyConditionTo applyConditionTo = …): void
  • removed: method DelegateValidator.Validate(ValidationContext context): IEnumerable<ValidationFailure>
  • removed: method DelegateValidator.Validate(ValidationContext<T> context): IEnumerable<ValidationFailure>
  • removed: method DelegateValidator.ValidateAsync(ValidationContext context, CancellationToken cancellation): Task<IEnumerable<ValidationFailure>>
  • removed: method DelegateValidator.ValidateAsync(ValidationContext<T> context, CancellationToken cancellation): Task<IEnumerable<ValidationFailure>>
  • removed: property DelegateValidator.RuleSets: string[] { get; set; }
  • removed: property DelegateValidator.Validators: IEnumerable<IPropertyValidator> { get; }
  • changed: class MessageBuilderContext → class MessageBuilderContext implements IValidationContext
  • changed: class RuleBuilder<T, TProperty> implements IConfigurable<PropertyRule, IRuleBuilderInitial<T, TProperty>>, IConfigurable<PropertyRule, IRuleBuilderOptions<T, TProperty>>, IExposesParentValidator<T>, IRuleBuilder<T, TProperty>, IRuleBuilderInitial<T, TProperty>, IRuleBuilderOptions<T, TProperty> → class RuleBuilder<T, TProperty> implements IConfigurable<CollectionPropertyRule<TProperty>, IRuleBuilderInitialCollection<T, TProperty>>, IConfigurable<PropertyRule, IRuleBuilderInitial<T, TProperty>>, IConfigurable<PropertyRule, IRuleBuilderOptions<T, TProperty>>, IExposesParentValidator<T>, IRuleBuilder<T, TProperty>, IRuleBuilderInitial<T, TProperty>, IRuleBuilderInitialCollection<T, TProperty…
  • changed: ctor IncludeRule(Func<object, IValidator> func, Func<CascadeMode> cascadeModeThunk, Type typeToValidate, Type containerType, Type validatorType) → ctor IncludeRule(Func<IValidationContext, IValidator> func, Func<CascadeMode> cascadeModeThunk, Type typeToValidate, Type containerType, Type validatorType)
  • changed: method PropertyChain.AddIndexer(object indexer): void → method PropertyChain.AddIndexer(object indexer, bool surroundWithBrackets = …): void
  • changed: method PropertyRule.ApplyAsyncCondition(Func<ValidationContext, CancellationToken, Task<bool>> predicate, ApplyConditionTo applyConditionTo = …): void → method PropertyRule.ApplyAsyncCondition(Func<PropertyValidatorContext, CancellationToken, Task<bool>> predicate, ApplyConditionTo applyConditionTo = …): void
  • changed: method PropertyRule.ApplyCondition(Func<ValidationContext, bool> predicate, ApplyConditionTo applyConditionTo = …): void → method PropertyRule.ApplyCondition(Func<PropertyValidatorContext, bool> predicate, ApplyConditionTo applyConditionTo = …): void
  • changed: method PropertyRule.GetDisplayName(object model): string → method PropertyRule.GetDisplayName(IValidationContext context): string
  • changed: method RuleBuilder.SetValidator(IValidator<TProperty> validator): IRuleBuilderOptions<T, TProperty> → method RuleBuilder.SetValidator(IValidator<TProperty> validator, string[] ruleSets): IRuleBuilderOptions<T, TProperty>
  • changed: method RuleBuilder.SetValidator<TValidator>(Func<T, TValidator> validatorProvider): IRuleBuilderOptions<T, TProperty> → method RuleBuilder.SetValidator<TValidator>(Func<IValidationContext, TValidator> validatorProvider): IRuleBuilderOptions<T, TProperty>
  • changed: static method AccessorCache.GetCachedAccessor<TProperty>(MemberInfo member, Expression<Func<T, TProperty>> expression): Func<T, TProperty> → static method AccessorCache.GetCachedAccessor<TProperty>(MemberInfo member, Expression<Func<T, TProperty>> expression, bool bypassCache = …): Func<T, TProperty>
  • changed: static method PropertyRule.Create<T, TProperty>(Expression<Func<T, TProperty>> expression, Func<CascadeMode> cascadeModeThunk): PropertyRule → static method PropertyRule.Create<T, TProperty>(Expression<Func<T, TProperty>> expression, Func<CascadeMode> cascadeModeThunk, bool bypassCache = …): PropertyRule
  • added: method RuleBuilder.SetValidator<TValidator>(Func<T, TValidator> validatorProvider, string[] ruleSets): IRuleBuilderOptions<T, TProperty>
  • added: method TrackingCollection.AddRange(IEnumerable<T> collection): void
  • added: property CollectionPropertyRule.Filter: Func<TProperty, bool> { get; set; }
  • added: property CollectionPropertyRule.IndexBuilder: Func<object, IEnumerable<TProperty>, TProperty, int, string> { get; set; }
  • added: property MessageBuilderContext.InstanceToValidate: object { get; }
  • added: property PropertyRule.AsyncCondition: Func<ValidationContext, CancellationToken, Task<bool>> { get; }
  • added: property PropertyRule.Condition: Func<ValidationContext, bool> { get; }
  • added: property TrackingCollection.Count: int { get; }
  • added: protected method MessageFormatter.ReplacePlaceholdersWithValues(string template, IDictionary<string, object> values): string
  • removed: class OverridableLocalizedStringSource extends LocalizedStringSource
  • removed: ctor LocalizedStringSource(Type resourceType, string resourceName, IResourceAccessorBuilder resourceAccessorBuilder)
  • removed: ctor OverridableLocalizedStringSource(Type resourceType, string resourceName)
  • removed: interface IResourceAccessorBuilder
  • removed: method IResourceAccessorBuilder.GetResourceAccessor(Type resourceType, string resourceName): ResourceAccessor
  • removed: protected method OverridableLocalizedStringSource.GetResourceProperty(ref Type resourceType, ref string resourceName): PropertyInfo
  • removed: static method LocalizedStringSource.CreateFromExpression(Expression<Func<string>> expression, IResourceAccessorBuilder resourceProviderSelectionStrategy): IStringSource
  • removed: static method OverridableLocalizedStringSource.CreateFromExpression(Expression<Func<string>> expression): IStringSource
  • changed: ctor LazyStringSource(Func<object, string> stringProvider) → ctor LazyStringSource(Func<IValidationContext, string> stringProvider)
  • changed: method IStringSource.GetString(object context): string → method IStringSource.GetString(IValidationContext context): string
  • changed: method LanguageStringSource.GetString(object context): string → method LanguageStringSource.GetString(IValidationContext context): string
  • changed: method LazyStringSource.GetString(object context): string → method LazyStringSource.GetString(IValidationContext context): string
  • changed: method LocalizedStringSource.GetString(object context): string → method LocalizedStringSource.GetString(IValidationContext context): string
  • changed: method StaticStringSource.GetString(object context): string → method StaticStringSource.GetString(IValidationContext context): string
  • added: abstract class Language
  • added: ctor LanguageStringSource(Func<IValidationContext, string> errorCodeFunc, string fallbackKey)
  • added: method Language.GetTranslation(string key): string
  • added: method Language.Translate(string key, string message): void
  • added: method Language.Translate<T>(string message): void
  • added: property Language.Name: string { get; }
  • added: protected ctor Language()
  • added: property ValidationResult.RuleSetsExecuted: string[] { get; }
  • changed: class TestValidationResult<T, TValue> → class TestValidationResult<T, TValue> extends ValidationResult implements IValidationResultTester
  • added: method TestValidationResult.ShouldHaveValidationErrorFor(string propertyName): IEnumerable<ValidationFailure>
  • added: method TestValidationResult.ShouldHaveValidationErrorFor<TProperty>(Expression<Func<T, TProperty>> memberAccessor): IEnumerable<ValidationFailure>
  • added: method TestValidationResult.ShouldNotHaveValidationErrorFor(string propertyName): void
  • added: method TestValidationResult.ShouldNotHaveValidationErrorFor<TProperty>(Expression<Func<T, TProperty>> memberAccessor): void
  • added: static method ValidationTestExtension.ShouldHaveAnyValidationError<T, TValue>(TestValidationResult<T, TValue> testValidationResult): IEnumerable<ValidationFailure>
  • added: static method ValidationTestExtension.ShouldNotHaveAnyValidationErrors<T, TValue>(TestValidationResult<T, TValue> testValidationResult): void
  • added: static method ValidationTestExtension.WhenAll(IEnumerable<ValidationFailure> failures, Func<ValidationFailure, bool> failurePredicate, string exceptionMessage = …): IEnumerable<ValidationFailure>
  • added: static method ValidationTestExtension.WithSeverity(IEnumerable<ValidationFailure> failures, Severity expectedSeverity): IEnumerable<ValidationFailure>
  • added: static method ValidationTestExtension.WithoutCustomState(IEnumerable<ValidationFailure> failures, object unexpectedCustomState): IEnumerable<ValidationFailure>
  • added: static method ValidationTestExtension.WithoutErrorCode(IEnumerable<ValidationFailure> failures, string unexpectedErrorCode): IEnumerable<ValidationFailure>
  • added: static method ValidationTestExtension.WithoutErrorMessage(IEnumerable<ValidationFailure> failures, string unexpectedErrorMessage): IEnumerable<ValidationFailure>
  • added: static method ValidationTestExtension.WithoutSeverity(IEnumerable<ValidationFailure> failures, Severity unexpectedSeverity): IEnumerable<ValidationFailure>
  • removed: class ChildCollectionValidatorAdaptor extends NoopPropertyValidator implements IShouldValidateAsync
  • removed: ctor ChildCollectionValidatorAdaptor(Func<object, IValidator> childValidatorProvider, Type childValidatorType)
  • removed: ctor ChildCollectionValidatorAdaptor(IValidator childValidator)
  • removed: interface IIndexedCollectionItem
  • removed: interface IShouldValidateAsync
  • removed: method ChildCollectionValidatorAdaptor.ShouldValidateAsync(ValidationContext context): bool
  • removed: method ChildCollectionValidatorAdaptor.Validate(PropertyValidatorContext context): IEnumerable<ValidationFailure>
  • removed: method ChildCollectionValidatorAdaptor.ValidateAsync(PropertyValidatorContext context, CancellationToken cancellation): Task<IEnumerable<ValidationFailure>>
  • removed: method IShouldValidateAsync.ShouldValidateAsync(ValidationContext context): bool
  • removed: property AsyncValidatorBase.IsAsync: bool { get; }
  • removed: property ChildCollectionValidatorAdaptor.ChildValidatorType: Type { get; }
  • removed: property ChildCollectionValidatorAdaptor.IsAsync: bool { get; }
  • removed: property ChildCollectionValidatorAdaptor.Predicate: Func<object, bool> { get; set; }
  • removed: property ChildValidatorAdaptor.IsAsync: bool { get; }
  • removed: property CustomValidator.IsAsync: bool { get; }
  • removed: property DelegatingValidator.CustomStateProvider: Func<PropertyValidatorContext, object> { get; set; }
  • removed: property DelegatingValidator.ErrorCodeSource: IStringSource { get; set; }
  • removed: property DelegatingValidator.ErrorMessageSource: IStringSource { get; set; }
  • removed: property DelegatingValidator.IsAsync: bool { get; }
  • removed: property DelegatingValidator.Severity: Severity { get; set; }
  • removed: property IIndexedCollectionItem.Index: string { get; }
  • removed: property IPropertyValidator.CustomStateProvider: Func<PropertyValidatorContext, object> { get; set; }
  • removed: property IPropertyValidator.ErrorCodeSource: IStringSource { get; set; }
  • removed: property IPropertyValidator.ErrorMessageSource: IStringSource { get; set; }
  • removed: property IPropertyValidator.IsAsync: bool { get; }
  • removed: property IPropertyValidator.Severity: Severity { get; set; }
  • removed: property NoopPropertyValidator.CustomMessageFormatArguments: ICollection<Func<object, object, object>> { get; }
  • removed: property NoopPropertyValidator.CustomStateProvider: Func<PropertyValidatorContext, object> { get; set; }
  • removed: property NoopPropertyValidator.ErrorCodeSource: IStringSource { get; set; }
  • removed: property NoopPropertyValidator.ErrorMessageSource: IStringSource { get; set; }
  • removed: property NoopPropertyValidator.IsAsync: bool { get; }
  • removed: property NoopPropertyValidator.Severity: Severity { get; set; }
  • removed: property PropertyValidator.CustomStateProvider: Func<PropertyValidatorContext, object> { get; set; }
  • removed: property PropertyValidator.ErrorCodeSource: IStringSource { get; set; }
  • removed: property PropertyValidator.ErrorMessageSource: IStringSource { get; set; }
  • removed: property PropertyValidator.IsAsync: bool { get; }
  • removed: property PropertyValidator.Severity: Severity { get; set; }
  • removed: property PropertyValidatorContext.PropertyDescription: string { get; }
  • removed: protected ctor PropertyValidator(Expression<Func<string>> errorMessageResourceSelector)
  • changed: abstract class AsyncValidatorBase extends PropertyValidator implements IShouldValidateAsync → abstract class AsyncValidatorBase extends PropertyValidator
  • changed: class AsyncPredicateValidator extends AsyncValidatorBase → class AsyncPredicateValidator extends PropertyValidator
  • changed: class ChildValidatorAdaptor extends NoopPropertyValidator implements IShouldValidateAsync → class ChildValidatorAdaptor extends NoopPropertyValidator implements IChildValidatorAdaptor
  • changed: class CustomContext → class CustomContext implements IValidationContext
  • changed: class CustomValidator<T> extends PropertyValidator implements IShouldValidateAsync → class CustomValidator<T> extends PropertyValidator
  • changed: class DelegatingValidator implements IDelegatingValidator, IPropertyValidator, IShouldValidateAsync → class DelegatingValidator implements IDelegatingValidator, IPropertyValidator
  • changed: class PropertyValidatorContext → class PropertyValidatorContext implements IValidationContext
  • changed: ctor ChildValidatorAdaptor(Func<object, IValidator> validatorProvider, Type validatorType) → ctor ChildValidatorAdaptor(Func<IValidationContext, IValidator> validatorProvider, Type validatorType)
  • changed: ctor ChildValidatorAdaptor(IValidator validator) → ctor ChildValidatorAdaptor(IValidator validator, Type validatorType)
  • changed: ctor DelegatingValidator(Func<ValidationContext, CancellationToken, Task<bool>> asyncCondition, IPropertyValidator innerValidator) → ctor DelegatingValidator(Func<PropertyValidatorContext, CancellationToken, Task<bool>> asyncCondition, IPropertyValidator innerValidator)
  • changed: ctor DelegatingValidator(Func<ValidationContext, bool> condition, IPropertyValidator innerValidator) → ctor DelegatingValidator(Func<PropertyValidatorContext, bool> condition, IPropertyValidator innerValidator)
  • changed: method DelegatingValidator.CheckCondition(ValidationContext context): bool → method DelegatingValidator.CheckCondition(PropertyValidatorContext context): bool
  • changed: method IDelegatingValidator.CheckCondition(ValidationContext context): bool → method IDelegatingValidator.CheckCondition(PropertyValidatorContext context): bool
  • changed: property ScalePrecisionValidator.IgnoreTrailingZeros: bool? { get; set; } → property ScalePrecisionValidator.IgnoreTrailingZeros: bool { get; set; }
  • added: class AspNetCoreCompatibleEmailValidator extends PropertyValidator implements IEmailValidator, IPropertyValidator, IRegularExpressionValidator
  • added: class OnFailureValidator<T> extends NoopPropertyValidator implements IChildValidatorAdaptor
  • added: class StringEnumValidator extends PropertyValidator
  • added: ctor AspNetCoreCompatibleEmailValidator()
  • added: ctor OnFailureValidator(IPropertyValidator innerValidator, Action<T, PropertyValidatorContext, string> onFailure)
  • added: ctor StringEnumValidator(Type enumType, bool caseSensitive)
  • added: enum EmailValidationMode
  • added: interface IChildValidatorAdaptor
  • added: member EmailValidationMode.AspNetCoreCompatible
  • added: member EmailValidationMode.Net4xRegex
  • added: method AsyncPredicateValidator.ShouldValidateAsync(ValidationContext context): bool
  • added: method IPropertyValidator.ShouldValidateAsync(ValidationContext context): bool
  • added: method NoopPropertyValidator.ShouldValidateAsync(ValidationContext context): bool
  • added: method OnFailureValidator.ShouldValidateAsync(ValidationContext context): bool
  • added: method OnFailureValidator.Validate(PropertyValidatorContext context): IEnumerable<ValidationFailure>
  • added: method OnFailureValidator.ValidateAsync(PropertyValidatorContext context, CancellationToken cancellation): Task<IEnumerable<ValidationFailure>>
  • added: method PropertyValidator.ShouldValidateAsync(ValidationContext context): bool
  • added: property ChildValidatorAdaptor.RuleSets: string[] { get; set; }
  • added: property CustomContext.InstanceToValidate: object { get; }
  • added: property CustomContext.PropertyValue: object { get; }
  • added: property DelegatingValidator.Options: PropertyValidatorOptions { get; }
  • added: property IChildValidatorAdaptor.ValidatorType: Type { get; }
  • added: property IPropertyValidator.Options: PropertyValidatorOptions { get; }
  • added: property NoopPropertyValidator.Options: PropertyValidatorOptions { get; }
  • added: property OnFailureValidator.ValidatorType: Type { get; }
  • added: property PropertyValidator.Options: PropertyValidatorOptions { get; }
  • added: protected method AspNetCoreCompatibleEmailValidator.IsValid(PropertyValidatorContext context): bool
  • added: protected method AsyncPredicateValidator.IsValid(PropertyValidatorContext context): bool
  • added: protected method StringEnumValidator.IsValid(PropertyValidatorContext context): bool