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; } } }