From 64b6bf3c62f07f7e9cee98310c8ca8772f451488 Mon Sep 17 00:00:00 2001 From: kolan72 Date: Wed, 11 Mar 2026 18:05:07 +0300 Subject: [PATCH 01/13] Package 0.15.0 version and update CHANGELOG.md. --- CHANGELOG.md | 20 ++++++++++++++++++++ src/ExpressValidator/ExpressValidator.csproj | 4 ++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 740112a..dce46f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,23 @@ +## 0.15.0 + +- Introduced validation failure for `null` root instances instead of throwing FluentValidation exceptions. +- Introduce abstract `ValidationProfile` class. +- Added an optional `Action` `onSuccessValidation` parameter to `ExpressValidatorBuilder.AddFunc` for handling successful validation of `Func` result. +- Refactor `ExpressValidatorBuilder.Build` to remove dependency on `ExpressValidator`. +- Deprecate the `ExpressValidator` class. +- Add internal `PropertyValidationProcessor` class. +- Switch to using `PropertyValidationProcessor` in `ExpressPropertyValidator` and `ExpressPropertyValidator`. +- Refactor `ExpressPropertyValidator` to set `IsAsync` in the constructor. +- Add internal utility `TypeHelper` class with `IsNull` method and use it in `TypeValidatorBase`. +- Introduce internal utility `TypeTraits` class. +- Update to FluentValidation 12.1.1. +- Add internal static `ValidationFallbackProvider` class representing validation failure for a `null` instance. +- Add ExpressValidator.Tests.Net8.csproj for testing ExpressValidator when TargetFramework is net8.0. +- Update tests to System.ValueTuple 4.6.2. +- Improve test coverage for null handling. +- Update NuGet.md and README.md. + + ## 0.12.2 - Move the instance field `TypeValidatorBase._shouldBeComparedToNull` to a static readonly field (renamed to `_canBeNull`) to cache the reflection result per `TypeValidatorBase` type and eliminate redundant per-instance evaluations. diff --git a/src/ExpressValidator/ExpressValidator.csproj b/src/ExpressValidator/ExpressValidator.csproj index 316654f..3f8ecc6 100644 --- a/src/ExpressValidator/ExpressValidator.csproj +++ b/src/ExpressValidator/ExpressValidator.csproj @@ -3,7 +3,7 @@ netstandard2.0;net8.0 true - 0.12.2 + 0.15.0 true Andrey Kolesnichenko ExpressValidator is a library that provides the ability to validate objects using the FluentValidation library, but without object inheritance from `AbstractValidator`. @@ -15,7 +15,7 @@ ExpressValidator.png NuGet.md - 0.12.2.0 + 0.15.0.0 0.0.0.0 From 62ca4979a545f0e725bbb535e75a9a3d49314bce Mon Sep 17 00:00:00 2001 From: kolan72 Date: Mon, 20 Apr 2026 11:14:09 +0300 Subject: [PATCH 02/13] Update to ExpressValidator 0.15.0 and FluentValidation 12.1.1. --- .../ExpressValidator.Extensions.DependencyInjection.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj b/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj index c561f19..c0b01a5 100644 --- a/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj +++ b/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj @@ -23,7 +23,7 @@ - + @@ -39,7 +39,7 @@ - + From af6239d4d0c9a9fe0de7e919753d1b2c6f60cdd1 Mon Sep 17 00:00:00 2001 From: kolan72 Date: Mon, 20 Apr 2026 11:16:13 +0300 Subject: [PATCH 03/13] Update ExpressValidator package for ExpressValidator.Extensions.DependencyInjection.Tests. --- ...pressValidator.Extensions.DependencyInjection.Tests.csproj | 4 ++-- .../packages.config | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj index 4e1c6d5..124d7ec 100644 --- a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj +++ b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj @@ -39,8 +39,8 @@ 4 - - ..\..\packages\ExpressValidator.0.12.2\lib\netstandard2.0\ExpressValidator.dll + + ..\..\packages\ExpressValidator.0.15.0\lib\netstandard2.0\ExpressValidator.dll ..\..\packages\FluentValidation.11.11.0\lib\netstandard2.0\FluentValidation.dll diff --git a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config index 8081237..c984f9b 100644 --- a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config +++ b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config @@ -1,6 +1,6 @@  - + From 00c2a6d304e28f04866415f1c1c3fbd4fa40807b Mon Sep 17 00:00:00 2001 From: kolan72 Date: Mon, 20 Apr 2026 11:22:33 +0300 Subject: [PATCH 04/13] Update Microsoft nuget packages. --- ...ator.Extensions.DependencyInjection.csproj | 4 +- ...xtensions.DependencyInjection.Tests.csproj | 77 ++++++++++--------- .../packages.config | 38 ++++----- 3 files changed, 60 insertions(+), 59 deletions(-) diff --git a/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj b/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj index c0b01a5..09abdf3 100644 --- a/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj +++ b/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj @@ -40,8 +40,8 @@ - - + + diff --git a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj index 124d7ec..071e2eb 100644 --- a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj +++ b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj @@ -45,50 +45,50 @@ ..\..\packages\FluentValidation.11.11.0\lib\netstandard2.0\FluentValidation.dll - - ..\..\packages\Microsoft.Bcl.AsyncInterfaces.10.0.1\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll + + ..\..\packages\Microsoft.Bcl.AsyncInterfaces.10.0.6\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll - - ..\..\packages\Microsoft.Extensions.Configuration.10.0.1\lib\net462\Microsoft.Extensions.Configuration.dll + + ..\..\packages\Microsoft.Extensions.Configuration.10.0.6\lib\net462\Microsoft.Extensions.Configuration.dll - - ..\..\packages\Microsoft.Extensions.Configuration.Abstractions.10.0.1\lib\net462\Microsoft.Extensions.Configuration.Abstractions.dll + + ..\..\packages\Microsoft.Extensions.Configuration.Abstractions.10.0.6\lib\net462\Microsoft.Extensions.Configuration.Abstractions.dll - - ..\..\packages\Microsoft.Extensions.Configuration.Binder.10.0.1\lib\net462\Microsoft.Extensions.Configuration.Binder.dll + + ..\..\packages\Microsoft.Extensions.Configuration.Binder.10.0.6\lib\net462\Microsoft.Extensions.Configuration.Binder.dll - - ..\..\packages\Microsoft.Extensions.Configuration.EnvironmentVariables.10.0.1\lib\net462\Microsoft.Extensions.Configuration.EnvironmentVariables.dll + + ..\..\packages\Microsoft.Extensions.Configuration.EnvironmentVariables.10.0.6\lib\net462\Microsoft.Extensions.Configuration.EnvironmentVariables.dll - - ..\..\packages\Microsoft.Extensions.Configuration.FileExtensions.10.0.1\lib\net462\Microsoft.Extensions.Configuration.FileExtensions.dll + + ..\..\packages\Microsoft.Extensions.Configuration.FileExtensions.10.0.6\lib\net462\Microsoft.Extensions.Configuration.FileExtensions.dll - - ..\..\packages\Microsoft.Extensions.Configuration.Json.10.0.1\lib\net462\Microsoft.Extensions.Configuration.Json.dll + + ..\..\packages\Microsoft.Extensions.Configuration.Json.10.0.6\lib\net462\Microsoft.Extensions.Configuration.Json.dll - - ..\..\packages\Microsoft.Extensions.DependencyInjection.10.0.1\lib\net462\Microsoft.Extensions.DependencyInjection.dll + + ..\..\packages\Microsoft.Extensions.DependencyInjection.10.0.6\lib\net462\Microsoft.Extensions.DependencyInjection.dll - - ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.10.0.1\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll + + ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.10.0.6\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - ..\..\packages\Microsoft.Extensions.FileProviders.Abstractions.10.0.1\lib\net462\Microsoft.Extensions.FileProviders.Abstractions.dll + + ..\..\packages\Microsoft.Extensions.FileProviders.Abstractions.10.0.6\lib\net462\Microsoft.Extensions.FileProviders.Abstractions.dll - - ..\..\packages\Microsoft.Extensions.FileProviders.Physical.10.0.1\lib\net462\Microsoft.Extensions.FileProviders.Physical.dll + + ..\..\packages\Microsoft.Extensions.FileProviders.Physical.10.0.6\lib\net462\Microsoft.Extensions.FileProviders.Physical.dll - - ..\..\packages\Microsoft.Extensions.FileSystemGlobbing.10.0.1\lib\net462\Microsoft.Extensions.FileSystemGlobbing.dll + + ..\..\packages\Microsoft.Extensions.FileSystemGlobbing.10.0.6\lib\net462\Microsoft.Extensions.FileSystemGlobbing.dll - - ..\..\packages\Microsoft.Extensions.Options.10.0.1\lib\net462\Microsoft.Extensions.Options.dll + + ..\..\packages\Microsoft.Extensions.Options.10.0.6\lib\net462\Microsoft.Extensions.Options.dll - - ..\..\packages\Microsoft.Extensions.Options.ConfigurationExtensions.10.0.1\lib\net462\Microsoft.Extensions.Options.ConfigurationExtensions.dll + + ..\..\packages\Microsoft.Extensions.Options.ConfigurationExtensions.10.0.6\lib\net462\Microsoft.Extensions.Options.ConfigurationExtensions.dll - - ..\..\packages\Microsoft.Extensions.Primitives.10.0.1\lib\net462\Microsoft.Extensions.Primitives.dll + + ..\..\packages\Microsoft.Extensions.Primitives.10.0.6\lib\net462\Microsoft.Extensions.Primitives.dll ..\..\packages\NUnit.4.4.0\lib\net462\nunit.framework.dll @@ -102,8 +102,8 @@ - - ..\..\packages\System.IO.Pipelines.10.0.1\lib\net462\System.IO.Pipelines.dll + + ..\..\packages\System.IO.Pipelines.10.0.6\lib\net462\System.IO.Pipelines.dll ..\..\packages\System.Memory.4.6.3\lib\net462\System.Memory.dll @@ -115,15 +115,16 @@ ..\..\packages\System.Runtime.CompilerServices.Unsafe.6.1.2\lib\net462\System.Runtime.CompilerServices.Unsafe.dll - - ..\..\packages\System.Text.Encodings.Web.10.0.1\lib\net462\System.Text.Encodings.Web.dll + + ..\..\packages\System.Text.Encodings.Web.10.0.6\lib\net462\System.Text.Encodings.Web.dll - - ..\..\packages\System.Text.Json.10.0.1\lib\net462\System.Text.Json.dll + + ..\..\packages\System.Text.Json.10.0.6\lib\net462\System.Text.Json.dll ..\..\packages\System.Threading.Tasks.Extensions.4.6.3\lib\net462\System.Threading.Tasks.Extensions.dll + @@ -159,8 +160,8 @@ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + - + \ No newline at end of file diff --git a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config index c984f9b..3db2fa8 100644 --- a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config +++ b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config @@ -2,30 +2,30 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - + + - + \ No newline at end of file From 5718a840ef4cc20a2dc95f281e291338579f8aff Mon Sep 17 00:00:00 2001 From: kolan72 Date: Mon, 20 Apr 2026 11:34:25 +0300 Subject: [PATCH 05/13] Change `ValidatorConfigurator` to inherit from `ValidationProfile`. --- .../ValidatorConfigurator.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/ExpressValidator.Extensions.DependencyInjection/ValidatorConfigurator.cs b/src/ExpressValidator.Extensions.DependencyInjection/ValidatorConfigurator.cs index c56d664..649e596 100644 --- a/src/ExpressValidator.Extensions.DependencyInjection/ValidatorConfigurator.cs +++ b/src/ExpressValidator.Extensions.DependencyInjection/ValidatorConfigurator.cs @@ -1,6 +1,6 @@ namespace ExpressValidator.Extensions.DependencyInjection { - public abstract class ValidatorConfigurator : IValidatorConfigurator + public abstract class ValidatorConfigurator : ValidationProfile, IValidatorConfigurator { private readonly ExpressValidatorBuilder _validatorBuilder; protected ValidatorConfigurator(ExpressValidatorOptions expressValidatorOptions = null) @@ -9,8 +9,6 @@ protected ValidatorConfigurator(ExpressValidatorOptions expressValidatorOptions _validatorBuilder = new ExpressValidatorBuilder(expressValidatorOptions.OnFirstPropertyValidatorFailed); } - public abstract void Configure(ExpressValidatorBuilder expressValidatorBuilder); - IExpressValidator IValidatorConfigurator.Build() { Configure(_validatorBuilder); From 2c757418b36910b03f0842fc9512b249fb04e2b7 Mon Sep 17 00:00:00 2001 From: kolan72 Date: Sun, 26 Apr 2026 22:28:52 +0300 Subject: [PATCH 06/13] Add `IServiceCollection` extensions `AddExpressValidationFromAssemblyContaining` and `AddExpressValidationFromCurrentAssembly`; update docs. --- .../README.md | 5 +++ .../ServiceCollectionExtensions.cs | 29 +++++++++++++++-- .../docs/NuGet.md | 7 ++++- .../ServiceCollectionExtensionsTests.cs | 31 +++++++++++++++++++ 4 files changed, 69 insertions(+), 3 deletions(-) diff --git a/src/ExpressValidator.Extensions.DependencyInjection/README.md b/src/ExpressValidator.Extensions.DependencyInjection/README.md index 45cb5f5..90f02f8 100644 --- a/src/ExpressValidator.Extensions.DependencyInjection/README.md +++ b/src/ExpressValidator.Extensions.DependencyInjection/README.md @@ -114,6 +114,11 @@ builder.Services.AddTransient(); // ... (Other code omitted for brevity) ``` +If you prefer not to pass an explicit `Assembly`, two convenience helpers are also available: + +- `AddExpressValidationFromAssemblyContaining()` - scans the assembly that contains `T` +- `AddExpressValidationFromCurrentAssembly()` - scans the calling assembly + ## ⚙️ Validation with Options In this approach, register an `IExpressValidatorBuilder` implementation (instead of `IExpressValidator`) in the DI container by calling the `AddExpressValidatorBuilder` method. diff --git a/src/ExpressValidator.Extensions.DependencyInjection/ServiceCollectionExtensions.cs b/src/ExpressValidator.Extensions.DependencyInjection/ServiceCollectionExtensions.cs index d25ccb0..0b9c45f 100644 --- a/src/ExpressValidator.Extensions.DependencyInjection/ServiceCollectionExtensions.cs +++ b/src/ExpressValidator.Extensions.DependencyInjection/ServiceCollectionExtensions.cs @@ -12,8 +12,8 @@ public static class ServiceCollectionExtensions /// Registers all concrete, non-abstract, non-generic classes that inherit from /// into the Microsoft Dependency Injection container. ///
- /// Behind the scenes, for every configurator type ExpressConfigurator<T> found, - /// the DI container will also expose a proxy implementation of , + /// Behind the scenes, for every configurator type ExpressConfigurator<T> found, + /// the DI container will also expose a proxy implementation of , /// enabling validation logic to be resolved transparently via the service provider. /// /// The to add the services to. @@ -28,6 +28,31 @@ public static IServiceCollection AddExpressValidation(this IServiceCollection se return services; } + /// + /// Registers all concrete, non-abstract, non-generic classes that inherit from + /// from the assembly that contains into the Microsoft Dependency Injection container. + /// + /// A type located in the assembly to scan. + /// The to add the services to. + /// The service lifetime for the registered configurators. Defaults to . + /// The for chaining. + public static IServiceCollection AddExpressValidationFromAssemblyContaining(this IServiceCollection services, ServiceLifetime lifetime = ServiceLifetime.Transient) + { + return services.AddExpressValidation(typeof(T).Assembly, lifetime); + } + + /// + /// Registers all concrete, non-abstract, non-generic classes that inherit from + /// from the assembly that called this method into the Microsoft Dependency Injection container. + /// + /// The to add the services to. + /// The service lifetime for the registered configurators. Defaults to . + /// The for chaining. + public static IServiceCollection AddExpressValidationFromCurrentAssembly(this IServiceCollection services, ServiceLifetime lifetime = ServiceLifetime.Transient) + { + return services.AddExpressValidation(Assembly.GetCallingAssembly(), lifetime); + } + public static IServiceCollection AddExpressValidator(this IServiceCollection services, Action> configure, ServiceLifetime serviceLifetime = ServiceLifetime.Transient) { return AddExpressValidator(services, configure, new ExpressValidatorOptions() { OnFirstPropertyValidatorFailed = OnFirstPropertyValidatorFailed.Continue }, serviceLifetime); diff --git a/src/ExpressValidator.Extensions.DependencyInjection/docs/NuGet.md b/src/ExpressValidator.Extensions.DependencyInjection/docs/NuGet.md index 3dca396..779f11b 100644 --- a/src/ExpressValidator.Extensions.DependencyInjection/docs/NuGet.md +++ b/src/ExpressValidator.Extensions.DependencyInjection/docs/NuGet.md @@ -110,6 +110,11 @@ builder.Services.AddTransient(); // ... (Other code omitted for brevity) ``` +If you want a shorthand for assembly scanning, you can also use: + +- `AddExpressValidationFromAssemblyContaining()` +- `AddExpressValidationFromCurrentAssembly()` + ## Validation with Options In this approach, register an `IExpressValidatorBuilder` implementation (instead of `IExpressValidator`) in the DI container by calling the `AddExpressValidatorBuilder` method. @@ -254,4 +259,4 @@ public class ReloadableNumberGuessingService : IReloadableNumberGuessingService ## Samples -See samples folder for concrete example. \ No newline at end of file +See samples folder for concrete example. diff --git a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ServiceCollectionExtensionsTests.cs b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ServiceCollectionExtensionsTests.cs index 9f12697..c9f9cbe 100644 --- a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ServiceCollectionExtensionsTests.cs +++ b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ServiceCollectionExtensionsTests.cs @@ -3,6 +3,7 @@ using FluentValidation; using System.IO; using Microsoft.Extensions.Configuration; +using System.Linq; namespace ExpressValidator.Extensions.DependencyInjection.Tests { @@ -21,6 +22,36 @@ public void Should_AddExpressValidator_Register() Assert.That(service, Is.Not.Null); } + [Test] + public void Should_AddExpressValidationFromAssemblyContaining_Register() + { + var result = _services.AddExpressValidationFromAssemblyContaining(); + + Assert.That(result, Is.SameAs(_services)); + + var descriptor = _services.FirstOrDefault(sd => + sd.ServiceType.IsGenericType && + sd.ServiceType.GetGenericTypeDefinition() == typeof(IExpressValidator<>)); + + Assert.That(descriptor, Is.Not.Null); + Assert.That(descriptor.ImplementationType.GetGenericTypeDefinition(), Is.EqualTo(typeof(ProxyValidator<>))); + } + + [Test] + public void Should_AddExpressValidationFromCurrentAssembly_Register() + { + var result = _services.AddExpressValidationFromCurrentAssembly(); + + Assert.That(result, Is.SameAs(_services)); + + var descriptor = _services.FirstOrDefault(sd => + sd.ServiceType.IsGenericType && + sd.ServiceType.GetGenericTypeDefinition() == typeof(IExpressValidator<>)); + + Assert.That(descriptor, Is.Not.Null); + Assert.That(descriptor.ImplementationType.GetGenericTypeDefinition(), Is.EqualTo(typeof(ProxyValidator<>))); + } + [Test] public void Should_AddExpressValidatorBuilder_Register() { From f9129e3549848c148b25981960609be8e951e048 Mon Sep 17 00:00:00 2001 From: kolan72 Date: Tue, 5 May 2026 17:57:21 +0300 Subject: [PATCH 07/13] Update Microsoft nuget packages. --- .../ExpressValidator.Extensions.DependencyInjection.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj b/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj index 09abdf3..d5b4858 100644 --- a/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj +++ b/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj @@ -40,8 +40,8 @@ - - + + From 97f91dc82f975b40252d214b76b45627b852625a Mon Sep 17 00:00:00 2001 From: kolan72 Date: Tue, 5 May 2026 18:16:26 +0300 Subject: [PATCH 08/13] Update Microsoft nuget packages for tests. --- ...xtensions.DependencyInjection.Tests.csproj | 72 +++++++++---------- .../packages.config | 36 +++++----- 2 files changed, 54 insertions(+), 54 deletions(-) diff --git a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj index 071e2eb..0557741 100644 --- a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj +++ b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj @@ -45,50 +45,50 @@ ..\..\packages\FluentValidation.11.11.0\lib\netstandard2.0\FluentValidation.dll - - ..\..\packages\Microsoft.Bcl.AsyncInterfaces.10.0.6\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll + + ..\..\packages\Microsoft.Bcl.AsyncInterfaces.10.0.7\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll - - ..\..\packages\Microsoft.Extensions.Configuration.10.0.6\lib\net462\Microsoft.Extensions.Configuration.dll + + ..\..\packages\Microsoft.Extensions.Configuration.10.0.7\lib\net462\Microsoft.Extensions.Configuration.dll - - ..\..\packages\Microsoft.Extensions.Configuration.Abstractions.10.0.6\lib\net462\Microsoft.Extensions.Configuration.Abstractions.dll + + ..\..\packages\Microsoft.Extensions.Configuration.Abstractions.10.0.7\lib\net462\Microsoft.Extensions.Configuration.Abstractions.dll - - ..\..\packages\Microsoft.Extensions.Configuration.Binder.10.0.6\lib\net462\Microsoft.Extensions.Configuration.Binder.dll + + ..\..\packages\Microsoft.Extensions.Configuration.Binder.10.0.7\lib\net462\Microsoft.Extensions.Configuration.Binder.dll - - ..\..\packages\Microsoft.Extensions.Configuration.EnvironmentVariables.10.0.6\lib\net462\Microsoft.Extensions.Configuration.EnvironmentVariables.dll + + ..\..\packages\Microsoft.Extensions.Configuration.EnvironmentVariables.10.0.7\lib\net462\Microsoft.Extensions.Configuration.EnvironmentVariables.dll - - ..\..\packages\Microsoft.Extensions.Configuration.FileExtensions.10.0.6\lib\net462\Microsoft.Extensions.Configuration.FileExtensions.dll + + ..\..\packages\Microsoft.Extensions.Configuration.FileExtensions.10.0.7\lib\net462\Microsoft.Extensions.Configuration.FileExtensions.dll - - ..\..\packages\Microsoft.Extensions.Configuration.Json.10.0.6\lib\net462\Microsoft.Extensions.Configuration.Json.dll + + ..\..\packages\Microsoft.Extensions.Configuration.Json.10.0.7\lib\net462\Microsoft.Extensions.Configuration.Json.dll - - ..\..\packages\Microsoft.Extensions.DependencyInjection.10.0.6\lib\net462\Microsoft.Extensions.DependencyInjection.dll + + ..\..\packages\Microsoft.Extensions.DependencyInjection.10.0.7\lib\net462\Microsoft.Extensions.DependencyInjection.dll - - ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.10.0.6\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll + + ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.10.0.7\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - ..\..\packages\Microsoft.Extensions.FileProviders.Abstractions.10.0.6\lib\net462\Microsoft.Extensions.FileProviders.Abstractions.dll + + ..\..\packages\Microsoft.Extensions.FileProviders.Abstractions.10.0.7\lib\net462\Microsoft.Extensions.FileProviders.Abstractions.dll - - ..\..\packages\Microsoft.Extensions.FileProviders.Physical.10.0.6\lib\net462\Microsoft.Extensions.FileProviders.Physical.dll + + ..\..\packages\Microsoft.Extensions.FileProviders.Physical.10.0.7\lib\net462\Microsoft.Extensions.FileProviders.Physical.dll - - ..\..\packages\Microsoft.Extensions.FileSystemGlobbing.10.0.6\lib\net462\Microsoft.Extensions.FileSystemGlobbing.dll + + ..\..\packages\Microsoft.Extensions.FileSystemGlobbing.10.0.7\lib\net462\Microsoft.Extensions.FileSystemGlobbing.dll - - ..\..\packages\Microsoft.Extensions.Options.10.0.6\lib\net462\Microsoft.Extensions.Options.dll + + ..\..\packages\Microsoft.Extensions.Options.10.0.7\lib\net462\Microsoft.Extensions.Options.dll - - ..\..\packages\Microsoft.Extensions.Options.ConfigurationExtensions.10.0.6\lib\net462\Microsoft.Extensions.Options.ConfigurationExtensions.dll + + ..\..\packages\Microsoft.Extensions.Options.ConfigurationExtensions.10.0.7\lib\net462\Microsoft.Extensions.Options.ConfigurationExtensions.dll - - ..\..\packages\Microsoft.Extensions.Primitives.10.0.6\lib\net462\Microsoft.Extensions.Primitives.dll + + ..\..\packages\Microsoft.Extensions.Primitives.10.0.7\lib\net462\Microsoft.Extensions.Primitives.dll ..\..\packages\NUnit.4.4.0\lib\net462\nunit.framework.dll @@ -102,8 +102,8 @@ - - ..\..\packages\System.IO.Pipelines.10.0.6\lib\net462\System.IO.Pipelines.dll + + ..\..\packages\System.IO.Pipelines.10.0.7\lib\net462\System.IO.Pipelines.dll ..\..\packages\System.Memory.4.6.3\lib\net462\System.Memory.dll @@ -115,11 +115,11 @@ ..\..\packages\System.Runtime.CompilerServices.Unsafe.6.1.2\lib\net462\System.Runtime.CompilerServices.Unsafe.dll - - ..\..\packages\System.Text.Encodings.Web.10.0.6\lib\net462\System.Text.Encodings.Web.dll + + ..\..\packages\System.Text.Encodings.Web.10.0.7\lib\net462\System.Text.Encodings.Web.dll - - ..\..\packages\System.Text.Json.10.0.6\lib\net462\System.Text.Json.dll + + ..\..\packages\System.Text.Json.10.0.7\lib\net462\System.Text.Json.dll ..\..\packages\System.Threading.Tasks.Extensions.4.6.3\lib\net462\System.Threading.Tasks.Extensions.dll diff --git a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config index 3db2fa8..c9a50b7 100644 --- a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config +++ b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config @@ -2,30 +2,30 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - + + \ No newline at end of file From f15473cd82a0fc0274ed2fd0e3920313de574a18 Mon Sep 17 00:00:00 2001 From: kolan72 Date: Tue, 5 May 2026 18:24:32 +0300 Subject: [PATCH 09/13] Update ConfiguratorDemo sample to use `AddExpressValidationFromCurrentAssembly`. --- .../ConfiguratorDemo/Program.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/samples/ExpressValidator.Extensions.DependencyInjection.Sample/ConfiguratorDemo/Program.cs b/samples/ExpressValidator.Extensions.DependencyInjection.Sample/ConfiguratorDemo/Program.cs index a0ae29a..c74bc3f 100644 --- a/samples/ExpressValidator.Extensions.DependencyInjection.Sample/ConfiguratorDemo/Program.cs +++ b/samples/ExpressValidator.Extensions.DependencyInjection.Sample/ConfiguratorDemo/Program.cs @@ -1,6 +1,5 @@ using ExpressValidator.Extensions.DependencyInjection; using Shared; -using System.Reflection; namespace ConfiguratorDemo { @@ -10,7 +9,7 @@ public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); - builder.Services.AddExpressValidation(Assembly.GetExecutingAssembly()); + builder.Services.AddExpressValidationFromCurrentAssembly(); builder.Services.AddTransient(); From bc6202e315bb710f8357dd73fe091439263a8f6f Mon Sep 17 00:00:00 2001 From: kolan72 Date: Thu, 7 May 2026 18:23:33 +0300 Subject: [PATCH 10/13] Unify applicationUrl in launchSettings.json for all samples. --- .../ConfiguratorDemo/Properties/launchSettings.json | 3 ++- .../QuickStart/Properties/launchSettings.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/samples/ExpressValidator.Extensions.DependencyInjection.Sample/ConfiguratorDemo/Properties/launchSettings.json b/samples/ExpressValidator.Extensions.DependencyInjection.Sample/ConfiguratorDemo/Properties/launchSettings.json index cfa5164..19561b6 100644 --- a/samples/ExpressValidator.Extensions.DependencyInjection.Sample/ConfiguratorDemo/Properties/launchSettings.json +++ b/samples/ExpressValidator.Extensions.DependencyInjection.Sample/ConfiguratorDemo/Properties/launchSettings.json @@ -3,11 +3,12 @@ "ConfiguratorDemo": { "commandName": "Project", "launchBrowser": true, + "dotnetRunMessages": true, "launchUrl": "guess", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, - "applicationUrl": "https://localhost:56889;http://localhost:56890" + "applicationUrl": "http://localhost:5251" } } } \ No newline at end of file diff --git a/samples/ExpressValidator.Extensions.DependencyInjection.Sample/QuickStart/Properties/launchSettings.json b/samples/ExpressValidator.Extensions.DependencyInjection.Sample/QuickStart/Properties/launchSettings.json index 3fb3225..ea6cc61 100644 --- a/samples/ExpressValidator.Extensions.DependencyInjection.Sample/QuickStart/Properties/launchSettings.json +++ b/samples/ExpressValidator.Extensions.DependencyInjection.Sample/QuickStart/Properties/launchSettings.json @@ -7,7 +7,7 @@ "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, - "applicationUrl": "https://localhost:56889;http://localhost:56890" + "applicationUrl": "http://localhost:5251" } } } \ No newline at end of file From 6ca42f456a705a7db32f928279a67d471bb150ba Mon Sep 17 00:00:00 2001 From: kolan72 Date: Fri, 8 May 2026 12:40:54 +0300 Subject: [PATCH 11/13] Update NUnit NuGet package to v4.6.0. --- .../AddExpressValidationIntegrationTests.cs | 6 +++--- ...dator.Extensions.DependencyInjection.Tests.csproj | 12 ++++++------ ...CollectionExtensionsTests.AddExpressValidation.cs | 3 ++- .../packages.config | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/AddExpressValidationIntegrationTests.cs b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/AddExpressValidationIntegrationTests.cs index d056bb2..690ecc1 100644 --- a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/AddExpressValidationIntegrationTests.cs +++ b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/AddExpressValidationIntegrationTests.cs @@ -147,8 +147,8 @@ public void Should_ThrowException_WhenConfiguratorDoesNotExist() _services.AddExpressValidation(Assembly.GetExecutingAssembly()); _serviceProvider = _services.BuildServiceProvider(); - Assert.Throws(() => - _serviceProvider.GetRequiredService>()); + Assert.Throws((Action)(() => + _serviceProvider.GetRequiredService>())); } [Test] @@ -241,7 +241,7 @@ public void Should_DisposeProperlyInScope_WhenScopedLifetimeUsed() } // Validator should have been disposed with scope - Assert.DoesNotThrow(() => validator.Validate(new TestPersonModel())); + Assert.DoesNotThrow((Action)(() => validator.Validate(new TestPersonModel()))); } [Test] diff --git a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj index 0557741..a06aadc 100644 --- a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj +++ b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ExpressValidator.Extensions.DependencyInjection.Tests.csproj @@ -1,6 +1,6 @@  - + @@ -90,11 +90,11 @@ ..\..\packages\Microsoft.Extensions.Primitives.10.0.7\lib\net462\Microsoft.Extensions.Primitives.dll - - ..\..\packages\NUnit.4.4.0\lib\net462\nunit.framework.dll + + ..\..\packages\NUnit.4.6.0\lib\net462\nunit.framework.dll - - ..\..\packages\NUnit.4.4.0\lib\net462\nunit.framework.legacy.dll + + ..\..\packages\NUnit.4.6.0\lib\net462\nunit.framework.legacy.dll @@ -160,8 +160,8 @@ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + \ No newline at end of file diff --git a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ServiceCollectionExtensionsTests.AddExpressValidation.cs b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ServiceCollectionExtensionsTests.AddExpressValidation.cs index 7362d28..9b88524 100644 --- a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ServiceCollectionExtensionsTests.AddExpressValidation.cs +++ b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/ServiceCollectionExtensionsTests.AddExpressValidation.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.DependencyInjection; using NUnit.Framework; +using System; using System.Linq; using System.Reflection; @@ -122,7 +123,7 @@ public void Should_NotThrowException_WhenAssemblyHasNoConfigurators() { var emptyAssembly = typeof(object).Assembly; // mscorlib has no configurators - Assert.DoesNotThrow(() => _services.AddExpressValidation(emptyAssembly)); + Assert.DoesNotThrow((Action)(() => _services.AddExpressValidation(emptyAssembly))); } [Test] diff --git a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config index c9a50b7..9581b4f 100644 --- a/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config +++ b/tests/ExpressValidator.Extensions.DependencyInjection.Tests/packages.config @@ -17,7 +17,7 @@ - + From cb02ef400eb380a5e9261839fa8ad652cba96cc8 Mon Sep 17 00:00:00 2001 From: kolan72 Date: Fri, 8 May 2026 12:46:59 +0300 Subject: [PATCH 12/13] Update Shared.csproj to ExpressValidator 0.15.0. --- .../Shared/IGuessTheNumberService.cs | 1 - .../Shared/Shared.csproj | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/samples/ExpressValidator.Extensions.DependencyInjection.Sample/Shared/IGuessTheNumberService.cs b/samples/ExpressValidator.Extensions.DependencyInjection.Sample/Shared/IGuessTheNumberService.cs index 0f4c5e7..7d58dc7 100644 --- a/samples/ExpressValidator.Extensions.DependencyInjection.Sample/Shared/IGuessTheNumberService.cs +++ b/samples/ExpressValidator.Extensions.DependencyInjection.Sample/Shared/IGuessTheNumberService.cs @@ -1,5 +1,4 @@ using ExpressValidator; -using System; namespace Shared { diff --git a/samples/ExpressValidator.Extensions.DependencyInjection.Sample/Shared/Shared.csproj b/samples/ExpressValidator.Extensions.DependencyInjection.Sample/Shared/Shared.csproj index a6c27f2..6ed4ce4 100644 --- a/samples/ExpressValidator.Extensions.DependencyInjection.Sample/Shared/Shared.csproj +++ b/samples/ExpressValidator.Extensions.DependencyInjection.Sample/Shared/Shared.csproj @@ -6,7 +6,7 @@ - + From 5fcf0b278c62614b577c0f1f77eb28dc423dc2a5 Mon Sep 17 00:00:00 2001 From: kolan72 Date: Sat, 9 May 2026 14:47:51 +0300 Subject: [PATCH 13/13] Package 0.5.0 version and update CHANGELOG.md. --- .../CHANGELOG.md | 13 +++++++++++++ ...sValidator.Extensions.DependencyInjection.csproj | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/ExpressValidator.Extensions.DependencyInjection/CHANGELOG.md b/src/ExpressValidator.Extensions.DependencyInjection/CHANGELOG.md index 98c9a85..2d31b8d 100644 --- a/src/ExpressValidator.Extensions.DependencyInjection/CHANGELOG.md +++ b/src/ExpressValidator.Extensions.DependencyInjection/CHANGELOG.md @@ -1,3 +1,16 @@ +## 0.5.0 + +- Add `IServiceCollection` extensions `AddExpressValidationFromAssemblyContaining` and `AddExpressValidationFromCurrentAssembly`. +- Change `ValidatorConfigurator` to inherit from `ValidationProfile`. +- Update to ExpressValidator 0.15.0 and FluentValidation 12.1.1. +- Update ExpressValidator package for ExpressValidator.Extensions.DependencyInjection.Tests. +- Update ConfiguratorDemo sample to use `AddExpressValidationFromCurrentAssembly`. +- Unify applicationUrl in launchSettings.json for all samples. +- Update Shared.csproj to ExpressValidator 0.15.0. +- Update NUnit NuGet package to v4.6.0. +- Update Microsoft nuget packages. + + ## 0.4.0 - Introduced class-based validation configuration with dedicated configurator classes inheriting from `ValidatorConfigurator` and registered through `AddExpressValidation`. diff --git a/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj b/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj index 5503ca6..6109f19 100644 --- a/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj +++ b/src/ExpressValidator.Extensions.DependencyInjection/ExpressValidator.Extensions.DependencyInjection.csproj @@ -3,7 +3,7 @@ netstandard2.0;net8.0 true - 0.4.0 + 0.5.0 true Andrey Kolesnichenko MIT @@ -15,7 +15,7 @@ FluentValidation Validation DependencyInjection The ExpressValidator.Extensions.DependencyInjection package extends ExpressValidator to provide integration with Microsoft Dependency Injection. Copyright 2024 Andrey Kolesnichenko - 0.4.0.0 + 0.5.0.0