diff --git a/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationConventionalRegistrar.cs b/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationConventionalRegistrar.cs index e16450c213..9641b438b0 100644 --- a/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationConventionalRegistrar.cs +++ b/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]; diff --git a/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationModule.cs b/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationModule.cs index e48404a36d..bbd5d2c888 100644 --- a/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationModule.cs +++ b/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(options => { - options.ValidationContributor.Add(); + options.MethodValidationContributors.Add(); }); } } diff --git a/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/FluentMethodInvocationValidator.cs b/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/FluentMethodInvocationValidator.cs index 4749802cb1..0868093181 100644 --- a/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/FluentMethodInvocationValidator.cs +++ b/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 diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/AbpValidationModule.cs b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/AbpValidationModule.cs index 39041e044c..f47594a88a 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/AbpValidationModule.cs +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/AbpValidationModule.cs @@ -14,7 +14,7 @@ namespace Volo.Abp.Validation { Configure(options => { - options.ValidationContributor.Add(); + options.MethodValidationContributors.Add(); }); } } diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/AbpValidationOptions.cs b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/AbpValidationOptions.cs index 69737e5fb6..c88449da1a 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/AbpValidationOptions.cs +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/AbpValidationOptions.cs @@ -8,12 +8,12 @@ namespace Volo.Abp.Validation { public List IgnoredTypes { get; } - public ITypeList ValidationContributor { get; set; } + public ITypeList MethodValidationContributors { get; set; } public AbpValidationOptions() { IgnoredTypes = new List(); - ValidationContributor = new TypeList(); + MethodValidationContributors = new TypeList(); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationInterceptor.cs b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationInterceptor.cs index f15554d1c7..3b5d519c0c 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationInterceptor.cs +++ b/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);