diff --git a/src/Fluxera.Extensions.Validation.Abstractions/Fluxera.Extensions.Validation.Abstractions.csproj b/src/Fluxera.Extensions.Validation.Abstractions/Fluxera.Extensions.Validation.Abstractions.csproj
index 1929a58..133fa31 100644
--- a/src/Fluxera.Extensions.Validation.Abstractions/Fluxera.Extensions.Validation.Abstractions.csproj
+++ b/src/Fluxera.Extensions.Validation.Abstractions/Fluxera.Extensions.Validation.Abstractions.csproj
@@ -28,6 +28,7 @@
+
\ No newline at end of file
diff --git a/src/Fluxera.Extensions.Validation.Abstractions/IValidationBuilder.cs b/src/Fluxera.Extensions.Validation.Abstractions/IValidationBuilder.cs
new file mode 100644
index 0000000..6faecb0
--- /dev/null
+++ b/src/Fluxera.Extensions.Validation.Abstractions/IValidationBuilder.cs
@@ -0,0 +1,15 @@
+namespace Fluxera.Extensions.Validation
+{
+ using JetBrains.Annotations;
+ using Microsoft.Extensions.DependencyInjection;
+
+ [PublicAPI]
+ public interface IValidationBuilder
+ {
+ IValidationBuilder AddValidatorFactory() where T : class, IValidatorFactory;
+
+ IValidationBuilder AddValidatorFactoryNamed(string name) where T : class, IValidatorFactory;
+
+ IServiceCollection Services { get; }
+ }
+}
diff --git a/src/Fluxera.Extensions.Validation.Abstractions/IValidator.cs b/src/Fluxera.Extensions.Validation.Abstractions/IValidator.cs
new file mode 100644
index 0000000..773223e
--- /dev/null
+++ b/src/Fluxera.Extensions.Validation.Abstractions/IValidator.cs
@@ -0,0 +1,14 @@
+namespace Fluxera.Extensions.Validation
+{
+ using System.Threading.Tasks;
+ using JetBrains.Annotations;
+
+ ///
+ /// A contract for validators. The underlying validation frameworks must implement this.
+ ///
+ [PublicAPI]
+ public interface IValidator
+ {
+ Task ValidateAsync(object instance);
+ }
+}
diff --git a/src/Fluxera.Extensions.Validation/IValidatorFactory.cs b/src/Fluxera.Extensions.Validation.Abstractions/IValidatorFactory.cs
similarity index 100%
rename from src/Fluxera.Extensions.Validation/IValidatorFactory.cs
rename to src/Fluxera.Extensions.Validation.Abstractions/IValidatorFactory.cs
diff --git a/src/Fluxera.Extensions.Validation.DataAnnotations/ValidationBuilderExtensions.cs b/src/Fluxera.Extensions.Validation.DataAnnotations/ValidationBuilderExtensions.cs
index daf52cf..b227788 100644
--- a/src/Fluxera.Extensions.Validation.DataAnnotations/ValidationBuilderExtensions.cs
+++ b/src/Fluxera.Extensions.Validation.DataAnnotations/ValidationBuilderExtensions.cs
@@ -10,7 +10,7 @@ public static class ValidationBuilderExtensions
///
/// The builder.
/// The builder.
- public static ValidationBuilder AddDataAnnotations(this ValidationBuilder builder)
+ public static IValidationBuilder AddDataAnnotations(this IValidationBuilder builder)
{
builder.AddValidatorFactory();
@@ -23,7 +23,7 @@ public static ValidationBuilder AddDataAnnotations(this ValidationBuilder builde
/// The builder.
/// The name of the validator factory.
/// The builder.
- public static ValidationBuilder AddDataAnnotations(this ValidationBuilder builder, string name)
+ public static IValidationBuilder AddDataAnnotations(this IValidationBuilder builder, string name)
{
builder.AddValidatorFactoryNamed(name);
diff --git a/src/Fluxera.Extensions.Validation.FluentValidation/ValidationBuilderExtensions.cs b/src/Fluxera.Extensions.Validation.FluentValidation/ValidationBuilderExtensions.cs
index 8e50ec1..304b855 100644
--- a/src/Fluxera.Extensions.Validation.FluentValidation/ValidationBuilderExtensions.cs
+++ b/src/Fluxera.Extensions.Validation.FluentValidation/ValidationBuilderExtensions.cs
@@ -13,7 +13,7 @@ public static class ValidationBuilderExtensions
/// The builder.
/// Action to configure the registered validators.
/// The builder.
- public static ValidationBuilder AddFluentValidation(this ValidationBuilder builder, Action configure)
+ public static IValidationBuilder AddFluentValidation(this IValidationBuilder builder, Action configure)
{
Guard.Against.Null(builder, nameof(builder));
Guard.Against.Null(configure, nameof(configure));
@@ -32,7 +32,7 @@ public static ValidationBuilder AddFluentValidation(this ValidationBuilder build
/// The name of the validator factory.
/// Action to configure the registered validators.
/// The builder.
- public static ValidationBuilder AddFluentValidation(this ValidationBuilder builder, string name, Action configure)
+ public static IValidationBuilder AddFluentValidation(this IValidationBuilder builder, string name, Action configure)
{
Guard.Against.Null(builder, nameof(builder));
Guard.Against.Null(configure, nameof(configure));
diff --git a/src/Fluxera.Extensions.Validation/IValidator.cs b/src/Fluxera.Extensions.Validation/IValidator.cs
deleted file mode 100644
index d90fa10..0000000
--- a/src/Fluxera.Extensions.Validation/IValidator.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-namespace Fluxera.Extensions.Validation
{
using System.Threading.Tasks;
using JetBrains.Annotations;
///
- /// A contract for validators. The underlying validation frameworks must implement this.
- ///
[PublicAPI]
public interface IValidator
{
Task ValidateAsync(object instance);
}
}
\ No newline at end of file
diff --git a/src/Fluxera.Extensions.Validation/ServiceCollectionExtensions.cs b/src/Fluxera.Extensions.Validation/ServiceCollectionExtensions.cs
index 83a7c18..804c889 100644
--- a/src/Fluxera.Extensions.Validation/ServiceCollectionExtensions.cs
+++ b/src/Fluxera.Extensions.Validation/ServiceCollectionExtensions.cs
@@ -15,7 +15,7 @@ public static class ServiceCollectionExtensions
/// The service collection.
/// The action that configure the underlying validation framework.
/// The service collection.
- public static IServiceCollection AddValidation(this IServiceCollection services, Action? configure)
+ public static IServiceCollection AddValidation(this IServiceCollection services, Action configure)
{
Guard.Against.Null(services, nameof(services));
@@ -27,5 +27,20 @@ public static IServiceCollection AddValidation(this IServiceCollection services,
return services;
}
+
+ ///
+ /// Adds the validation service and configures the underlying validation framework.
+ ///
+ /// The service collection.
+ /// The service collection.
+ public static IServiceCollection AddValidation(this IServiceCollection services)
+ {
+ Guard.Against.Null(services, nameof(services));
+
+ // Register validation service.
+ services.TryAddTransient();
+
+ return services;
+ }
}
}
diff --git a/src/Fluxera.Extensions.Validation/ValidationBuilder.cs b/src/Fluxera.Extensions.Validation/ValidationBuilder.cs
index e51ee22..a05a613 100644
--- a/src/Fluxera.Extensions.Validation/ValidationBuilder.cs
+++ b/src/Fluxera.Extensions.Validation/ValidationBuilder.cs
@@ -7,7 +7,7 @@
using Microsoft.Extensions.DependencyInjection.Extensions;
[PublicAPI]
- public sealed class ValidationBuilder
+ internal sealed class ValidationBuilder : IValidationBuilder
{
public ValidationBuilder(IServiceCollection services)
{
@@ -16,9 +16,7 @@ public ValidationBuilder(IServiceCollection services)
this.Services = services;
}
- public IServiceCollection Services { get; }
-
- public ValidationBuilder AddValidatorFactory() where T : class, IValidatorFactory
+ public IValidationBuilder AddValidatorFactory() where T : class, IValidatorFactory
{
this.Services.TryAddTransient();
this.Services.AddTransient();
@@ -26,7 +24,7 @@ public ValidationBuilder AddValidatorFactory() where T : class, IValidatorFac
return this;
}
- public ValidationBuilder AddValidatorFactoryNamed(string name) where T : class, IValidatorFactory
+ public IValidationBuilder AddValidatorFactoryNamed(string name) where T : class, IValidatorFactory
{
this.Services.AddNamedTransient(builder =>
{
@@ -35,5 +33,8 @@ public ValidationBuilder AddValidatorFactoryNamed(string name) where T : clas
return this;
}
+
+ ///
+ public IServiceCollection Services { get; }
}
}