Skip to content

ChildRules with class hierarchies broken #2165

@runehalfdan

Description

@runehalfdan

FluentValidation version

11.7.1

ASP.NET version

No response

Summary

#2097 (Fix for multi-level child-rules) broke our validation code. We get exception Unable to cast object of type FluentValidation.Internal.RuleBuilder2[Root, Bar] to type FluentValidation.Internal.RuleBuilder2[Root, Base] when setting up validation in sample below.

It worked with 11.5.1, but broke when we upgraded to 11.7.1

Steps to Reproduce

using FluentValidation;

public class Root
{
    public Bar Data {get; set;} = null;
}

public class Base 
{
    public int Value {get; set;}
}

public class Bar : Base
{
    public int BarValue {get; set;}
}

public class RootValidator : AbstractionValidator<Root>
{
    public RootValidator()
    {
        RuleFor(x => x).ChildRules(RootRules);
    }

    public static Action<InlineValidator<Base>> BaseRules()
    {
        return rules => {
            rules.RuleFor(x => x.Value).NotEqual(-1);
        };
    }

    public static Action<InlineValidator<Root>> RootRules()
    {
        return rules => {
            rules.RuleFor(x => x.Data).ChildRules(BaseRules());
        };
    }
}

public static class Program
{
    public static void Main()
    {
        var validator = new RootValidator();
        var result = validator.Valdiate(new Root());
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions