Skip to content

Commit

Permalink
Refactored validation configuration. (#14)
Browse files Browse the repository at this point in the history
  • Loading branch information
mgernand authored Dec 14, 2021
1 parent db9e4f1 commit 071fec8
Show file tree
Hide file tree
Showing 9 changed files with 56 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
<ItemGroup>
<PackageReference Include="Fluxera.Guards" Version="6.0.5" />
<PackageReference Include="JetBrains.Annotations" Version="2021.3.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
namespace Fluxera.Extensions.Validation
{
using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection;

[PublicAPI]
public interface IValidationBuilder
{
IValidationBuilder AddValidatorFactory<T>() where T : class, IValidatorFactory;

IValidationBuilder AddValidatorFactoryNamed<T>(string name) where T : class, IValidatorFactory;

IServiceCollection Services { get; }
}
}
14 changes: 14 additions & 0 deletions src/Fluxera.Extensions.Validation.Abstractions/IValidator.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace Fluxera.Extensions.Validation
{
using System.Threading.Tasks;
using JetBrains.Annotations;

/// <summary>
/// A contract for validators. The underlying validation frameworks must implement this.
/// </summary>
[PublicAPI]
public interface IValidator
{
Task<ValidationResult> ValidateAsync(object instance);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public static class ValidationBuilderExtensions
/// </summary>
/// <param name="builder">The builder.</param>
/// <returns>The builder.</returns>
public static ValidationBuilder AddDataAnnotations(this ValidationBuilder builder)
public static IValidationBuilder AddDataAnnotations(this IValidationBuilder builder)
{
builder.AddValidatorFactory<DataAnnotationsValidationValidatorFactory>();

Expand All @@ -23,7 +23,7 @@ public static ValidationBuilder AddDataAnnotations(this ValidationBuilder builde
/// <param name="builder">The builder.</param>
/// <param name="name">The name of the validator factory.</param>
/// <returns>The builder.</returns>
public static ValidationBuilder AddDataAnnotations(this ValidationBuilder builder, string name)
public static IValidationBuilder AddDataAnnotations(this IValidationBuilder builder, string name)
{
builder.AddValidatorFactoryNamed<DataAnnotationsValidationValidatorFactory>(name);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public static class ValidationBuilderExtensions
/// <param name="builder">The builder.</param>
/// <param name="configure">Action to configure the registered validators.</param>
/// <returns>The builder.</returns>
public static ValidationBuilder AddFluentValidation(this ValidationBuilder builder, Action<ValidatorRegistration> configure)
public static IValidationBuilder AddFluentValidation(this IValidationBuilder builder, Action<ValidatorRegistration> configure)
{
Guard.Against.Null(builder, nameof(builder));
Guard.Against.Null(configure, nameof(configure));
Expand All @@ -32,7 +32,7 @@ public static ValidationBuilder AddFluentValidation(this ValidationBuilder build
/// <param name="name">The name of the validator factory.</param>
/// <param name="configure">Action to configure the registered validators.</param>
/// <returns>The builder.</returns>
public static ValidationBuilder AddFluentValidation(this ValidationBuilder builder, string name, Action<ValidatorRegistration> configure)
public static IValidationBuilder AddFluentValidation(this IValidationBuilder builder, string name, Action<ValidatorRegistration> configure)
{
Guard.Against.Null(builder, nameof(builder));
Guard.Against.Null(configure, nameof(configure));
Expand Down
3 changes: 0 additions & 3 deletions src/Fluxera.Extensions.Validation/IValidator.cs

This file was deleted.

17 changes: 16 additions & 1 deletion src/Fluxera.Extensions.Validation/ServiceCollectionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public static class ServiceCollectionExtensions
/// <param name="services">The service collection.</param>
/// <param name="configure">The action that configure the underlying validation framework.</param>
/// <returns>The service collection.</returns>
public static IServiceCollection AddValidation(this IServiceCollection services, Action<ValidationBuilder>? configure)
public static IServiceCollection AddValidation(this IServiceCollection services, Action<IValidationBuilder> configure)
{
Guard.Against.Null(services, nameof(services));

Expand All @@ -27,5 +27,20 @@ public static IServiceCollection AddValidation(this IServiceCollection services,

return services;
}

/// <summary>
/// Adds the validation service and configures the underlying validation framework.
/// </summary>
/// <param name="services">The service collection.</param>
/// <returns>The service collection.</returns>
public static IServiceCollection AddValidation(this IServiceCollection services)
{
Guard.Against.Null(services, nameof(services));

// Register validation service.
services.TryAddTransient<IValidationService, ValidationService>();

return services;
}
}
}
11 changes: 6 additions & 5 deletions src/Fluxera.Extensions.Validation/ValidationBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
using Microsoft.Extensions.DependencyInjection.Extensions;

[PublicAPI]
public sealed class ValidationBuilder
internal sealed class ValidationBuilder : IValidationBuilder
{
public ValidationBuilder(IServiceCollection services)
{
Expand All @@ -16,17 +16,15 @@ public ValidationBuilder(IServiceCollection services)
this.Services = services;
}

public IServiceCollection Services { get; }

public ValidationBuilder AddValidatorFactory<T>() where T : class, IValidatorFactory
public IValidationBuilder AddValidatorFactory<T>() where T : class, IValidatorFactory
{
this.Services.TryAddTransient<T>();
this.Services.AddTransient<IValidatorFactory, T>();

return this;
}

public ValidationBuilder AddValidatorFactoryNamed<T>(string name) where T : class, IValidatorFactory
public IValidationBuilder AddValidatorFactoryNamed<T>(string name) where T : class, IValidatorFactory
{
this.Services.AddNamedTransient<IValidatorFactory>(builder =>
{
Expand All @@ -35,5 +33,8 @@ public ValidationBuilder AddValidatorFactoryNamed<T>(string name) where T : clas

return this;
}

/// <inheritdoc />
public IServiceCollection Services { get; }
}
}

0 comments on commit 071fec8

Please sign in to comment.