Upgrading FluentValidation 7 to 8
Breaking7.6.105 → 8.6.3Breaking5Platform2Deprecated2New21Changed14Fixed17Other1
BreakingUpgrade verdict
5 breaking changes and 2 platform requirement changes.
In plain terms
- 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.
Must act Top 5 of 9 that need code or config changes
What you must change
Breaking5
Removes the pre-7 version of
Custom/CustomAsync.CustomCustomAsyncRemoves the deprecated localization system.
Removes deprecated
RemoveRule/ReplaceRule/ClearRules methods.RemoveRuleReplaceRuleClearRulesMoves the
AttributedValidatorFactory into a separate package.AttributedValidatorFactoryIStringSource.GetString now takes a context.IStringSource.GetStringPlatform2
Adds support for ASP.NET Core 3.1.
Adds support for ASP.NET Core 3.
Deprecations to plan for
Deprecated2
Marks DelegatingValidator as deprecated.
DelegatingValidatorDeprecates
SetCollectionValidator in favour of RuleForEach().SetValidator.SetCollectionValidatorRuleForEachSetValidatorAPI changes
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