From 2f32d284a2a94b5ef4129ae500d424b5dd3c4d41 Mon Sep 17 00:00:00 2001 From: Matt Meckes Date: Fri, 21 Aug 2020 10:30:27 +0100 Subject: [PATCH] Updated to suport FluentValidation 9.x.x. Removal of non-generic Validate overload. ChildValidatorAdaptor and IncludeRule now have generic parameters. --- .../FunctionMonkey.Compiler.csproj | 2 +- .../FunctionMonkey.FluentValidation.csproj | 2 +- .../Implementation/Validator.cs | 3 ++- .../OpenApiFluentValidationSchemaFilter.cs | 21 +++++++++++++++---- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Source/FunctionMonkey.Compiler/FunctionMonkey.Compiler.csproj b/Source/FunctionMonkey.Compiler/FunctionMonkey.Compiler.csproj index 2aa10595..e7baaeb8 100644 --- a/Source/FunctionMonkey.Compiler/FunctionMonkey.Compiler.csproj +++ b/Source/FunctionMonkey.Compiler/FunctionMonkey.Compiler.csproj @@ -189,7 +189,7 @@ - + diff --git a/Source/FunctionMonkey.FluentValidation/FunctionMonkey.FluentValidation.csproj b/Source/FunctionMonkey.FluentValidation/FunctionMonkey.FluentValidation.csproj index 992fb9cc..69a2cb69 100644 --- a/Source/FunctionMonkey.FluentValidation/FunctionMonkey.FluentValidation.csproj +++ b/Source/FunctionMonkey.FluentValidation/FunctionMonkey.FluentValidation.csproj @@ -14,7 +14,7 @@ - + diff --git a/Source/FunctionMonkey.FluentValidation/Implementation/Validator.cs b/Source/FunctionMonkey.FluentValidation/Implementation/Validator.cs index 7ba4ba71..4573ec90 100644 --- a/Source/FunctionMonkey.FluentValidation/Implementation/Validator.cs +++ b/Source/FunctionMonkey.FluentValidation/Implementation/Validator.cs @@ -29,7 +29,8 @@ public ValidationResult Validate(object command) return new ValidationResult(); } - var validationResult = validator.Validate(command); + var context = new ValidationContext(command); + var validationResult = validator.Validate(context); return new ValidationResult { diff --git a/Source/FunctionMonkey.FluentValidation/OpenApi/OpenApiFluentValidationSchemaFilter.cs b/Source/FunctionMonkey.FluentValidation/OpenApi/OpenApiFluentValidationSchemaFilter.cs index c48a381f..5842651e 100644 --- a/Source/FunctionMonkey.FluentValidation/OpenApi/OpenApiFluentValidationSchemaFilter.cs +++ b/Source/FunctionMonkey.FluentValidation/OpenApi/OpenApiFluentValidationSchemaFilter.cs @@ -78,18 +78,31 @@ private void AddRulesFromIncludedValidators(OpenApiSchema schema, IOpenApiSchema { var childAdapters = (validator as IEnumerable) .NotNull() - .OfType() + .OfType() .Where(includeRule => includeRule.Condition == null && includeRule.AsyncCondition == null) .SelectMany(includeRule => includeRule.Validators) - .OfType(); + .OfType(); foreach (var adapter in childAdapters) { - var propertyValidatorContext = new PropertyValidatorContext(new ValidationContext(null), null, string.Empty); - var includeValidator = adapter.GetValidator(propertyValidatorContext); + var propertyValidatorContext = new PropertyValidatorContext(new ValidationContext(null), null, string.Empty); + var includeValidator = GetValidatorFromChildValidatorAdapter(adapter, propertyValidatorContext); ApplyRulesToSchema(schema, schemaFilterContext, includeValidator); AddRulesFromIncludedValidators(schema, schemaFilterContext, includeValidator); } } + + private IValidator GetValidatorFromChildValidatorAdapter(IChildValidatorAdaptor childValidatorAdapter, PropertyValidatorContext propertyValidatorContext) + { + var childValidatorAdapterType = childValidatorAdapter.GetType(); + var getValidatorMethod = childValidatorAdapterType.GetMethod(nameof(ChildValidatorAdaptor.GetValidator)); + if (getValidatorMethod != null) + { + var validator = (IValidator)getValidatorMethod.Invoke(childValidatorAdapter, new[] { propertyValidatorContext }); + return validator; + } + + return null; + } } }