New Features
Added an assertion api to the PropertyValidator so that the Properties<T> api can be extended by clients.
The order of operations for the Properties api is as follows: If(), Required(), Assertions().
As an example, customized support for boolean properties was added to the library using the following code:
public static class BooleanPropertyExtensions { public static PropertyValidator<TContext, bool> IsTrue<TContext>(this PropertyValidator<TContext, bool> self) { self.Assert((t, p) => p); return self; } public static PropertyValidator<TContext, bool> IsFalse<TContext>(this PropertyValidator<TContext, bool> self) { self.Assert((t, p) => !p); return self; } public static PropertyValidator<TContext, bool?> IsTrue<TContext>(this PropertyValidator<TContext, bool?> self) { self.Assert((t, p) => p.GetValueOrDefault()); return self; } public static PropertyValidator<TContext, bool?> IsFalse<TContext>(this PropertyValidator<TContext, bool?> self) { self.Assert((t, p) => p.HasValue && !p.Value); return self; } }
Breaking Changes
RangePropertyValidator has been removed. It’s functionality is still available, but it has been entirely replaced by extension methods that use the new Assert() method on the PropertyValidator.
ValidationResultTypes have been completely removed. Then intent for ValidationResult.Type is that it is custom per project.