Browse Source

Refactored FluentValidation #1003.

pull/1013/head
Halil ibrahim Kalkan 8 years ago
parent
commit
b7c607769a
  1. 21
      framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationConventionalRegistrar.cs
  2. 6
      framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationModule.cs
  3. 26
      framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/FluentMethodInvocationValidator.cs
  4. 2
      framework/src/Volo.Abp.Validation/Volo/Abp/Validation/AbpValidationModule.cs
  5. 4
      framework/src/Volo.Abp.Validation/Volo/Abp/Validation/AbpValidationOptions.cs
  6. 2
      framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationInterceptor.cs

21
framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationConventionalRegistrar.cs

@ -9,17 +9,21 @@ namespace Volo.Abp.FluentValidation
{
public override void AddType(IServiceCollection services, Type type)
{
if (typeof(IValidator).IsAssignableFrom(type))
if (!typeof(IValidator).IsAssignableFrom(type))
{
var dtoType = GetFirstGenericArgumentOrNull(type, 1);
if (dtoType != null)
{
var serverType = typeof(IValidator<>).MakeGenericType(dtoType);
var serviceDescriptor = ServiceDescriptor.Describe(serverType, type, ServiceLifetime.Transient);
return;
}
services.Add(serviceDescriptor);
}
var validatingType = GetFirstGenericArgumentOrNull(type, 1);
if (validatingType == null)
{
return;
}
services.AddTransient(
typeof(IValidator<>).MakeGenericType(validatingType),
type
);
}
private static Type GetFirstGenericArgumentOrNull(Type type, int depth)
@ -30,6 +34,7 @@ namespace Volo.Abp.FluentValidation
{
return null;
}
if (type.IsGenericType && type.GetGenericArguments().Length >= 1)
{
return type.GetGenericArguments()[0];

6
framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationModule.cs

@ -4,7 +4,9 @@ using Volo.Abp.Validation;
namespace Volo.Abp.FluentValidation
{
[DependsOn(typeof(AbpValidationModule))]
[DependsOn(
typeof(AbpValidationModule)
)]
public class AbpFluentValidationModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
@ -16,7 +18,7 @@ namespace Volo.Abp.FluentValidation
{
Configure<AbpValidationOptions>(options =>
{
options.ValidationContributor.Add<FluentMethodInvocationValidator>();
options.MethodValidationContributors.Add<FluentMethodInvocationValidator>();
});
}
}

26
framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/FluentMethodInvocationValidator.cs

@ -11,7 +11,8 @@ namespace Volo.Abp.FluentValidation
{
private readonly IServiceProvider _serviceProvider;
public FluentMethodInvocationValidator(IServiceProvider serviceProvider)
public FluentMethodInvocationValidator(
IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
@ -22,21 +23,28 @@ namespace Volo.Abp.FluentValidation
foreach (var parameterValue in context.ParameterValues)
{
var serverType = typeof(IValidator<>).MakeGenericType(parameterValue.GetType());
var serviceType = typeof(IValidator<>).MakeGenericType(parameterValue.GetType());
var validator = _serviceProvider.GetService(serviceType) as IValidator;
if (validator == null)
{
continue;
}
if (_serviceProvider.GetService(serverType) is IValidator validator)
var result = validator.Validate(parameterValue);
if (!result.IsValid)
{
var result = validator.Validate(parameterValue);
if (!result.IsValid)
{
validationResult.Errors.AddRange(result.Errors.Select(error =>
new ValidationResult(error.ErrorMessage)));
}
validationResult.Errors.AddRange(
result.Errors.Select(
error =>
new ValidationResult(error.ErrorMessage)
)
);
}
}
if (validationResult.Errors.Any())
{
//TODO: How to localize messages?
throw new AbpValidationException(
"Method arguments are not valid! See ValidationErrors for details.",
context.Errors

2
framework/src/Volo.Abp.Validation/Volo/Abp/Validation/AbpValidationModule.cs

@ -14,7 +14,7 @@ namespace Volo.Abp.Validation
{
Configure<AbpValidationOptions>(options =>
{
options.ValidationContributor.Add<MethodInvocationValidator>();
options.MethodValidationContributors.Add<MethodInvocationValidator>();
});
}
}

4
framework/src/Volo.Abp.Validation/Volo/Abp/Validation/AbpValidationOptions.cs

@ -8,12 +8,12 @@ namespace Volo.Abp.Validation
{
public List<Type> IgnoredTypes { get; }
public ITypeList<IMethodInvocationValidator> ValidationContributor { get; set; }
public ITypeList<IMethodInvocationValidator> MethodValidationContributors { get; set; }
public AbpValidationOptions()
{
IgnoredTypes = new List<Type>();
ValidationContributor = new TypeList<IMethodInvocationValidator>();
MethodValidationContributors = new TypeList<IMethodInvocationValidator>();
}
}
}

2
framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationInterceptor.cs

@ -47,7 +47,7 @@ namespace Volo.Abp.Validation
protected virtual void Validate(IAbpMethodInvocation invocation)
{
foreach (var validationContributor in _abpValidationOptions.ValidationContributor)
foreach (var validationContributor in _abpValidationOptions.MethodValidationContributors)
{
var validator = (IMethodInvocationValidator) _serviceProvider.GetRequiredService(validationContributor);

Loading…
Cancel
Save