blazor-validation icon indicating copy to clipboard operation
blazor-validation copied to clipboard

config.AddFluentValidation -> Index was outside the bounds of the array.

Open joost00719 opened this issue 1 year ago • 3 comments

When I try to register the validators using AddFluentValidation I get an exception:

System.IndexOutOfRangeException
  HResult=0x80131508
  Message=Index was outside the bounds of the array.
  Source=PeterLeslieMorris.Blazor.FluentValidation
  StackTrace:
   at PeterLeslieMorris.Blazor.Validation.ValidationConfigurationFluentValidationExtensions.ScanForValidators(IServiceCollection services, IEnumerable`1 assembliesToScan)
   at PeterLeslieMorris.Blazor.Validation.ValidationConfigurationFluentValidationExtensions.AddFluentValidation(ValidationConfiguration config, Assembly assemblyToScan, Assembly[] additionalAssembliesToScan)
   at ::redacted::.ConfigurationManagement.Blazor.Startup.<>c.<ConfigureServices>b__4_2(ValidationConfiguration config) in C:\Users\::redacted::\source\repos\Configuration Management Admin Tool\::redacted::.ConfigurationManagement.Blazor\Startup.cs:line 110

image There's no further information about what exactly went wrong.

This exception started after these validators were added:

   public class CustomerCompleteValidator: CustomerComplexValidator
   {
      public CustomerCompleteValidator(): base()
      {
      }
   }

   public class CustomerComplexValidator: AbstractValidator<CustomerComplexDto>
   {
      public CustomerComplexValidator()
      {

         RuleFor(p => p.Name)
            .NotEmpty();

         RuleFor(p => p.Email)
            .NotEmpty()
            .EmailAddress();

         RuleFor(x => x.PhoneNumber)
            .NotEmpty();
      }
   }

I am unsure whether or not my validator is invalid, or if it's a bug in this package.

I think a fix would be either make it work, or throw a meaningful exception, so the caller knows what's up.

joost00719 avatar Nov 07 '22 08:11 joost00719

I have rewritten my validator to not inherit from another validator, but rather add the other validator as rule.

   public class CustomerCompleteValidator: AbstractValidator<CustomerCompleteDto>
   {
      public CustomerCompleteValidator()
      {
         RuleFor(customer => customer).SetValidator(new CustomerComplexValidator());
      }
   }

This does not cause the exception. However, a proper exception message should still be implemented.

joost00719 avatar Nov 07 '22 08:11 joost00719

Would you be able to send a link to an example app on github?

mrpmorris avatar Nov 07 '22 17:11 mrpmorris

You can run this project to recreate the exception: https://github.com/joost00719/PeterLeslie.BlazorDemo

joost00719 avatar Nov 07 '22 18:11 joost00719