Pasando IOptions hasta validadores de FluentValidation anidados

Estoy trabajando con FluentValidation y mi validador de nivel superior se ve así:

public class TopLevelThingValidator : AbstractValidator<TopLevelThing>
{
    public TopLevelThingValidator()
    {
        RuleFor(a => a.SomeField).NotNull().WithErrorCode("1");
        // etc etc

        RuleForEach(a => a.SomeListOfInnerThing)
           .SetValidator(new InnerThingValidator());
    }

}

Este tipo de patrón cae en cascada unos pocos niveles, donde tengo un objeto interno-interno, y así sucesivamente.

Quiero inyectar IOptions<Domains>tanto en TopLevelThing como en InnerThing, que esencialmente está extrayendo un objeto dentro de appsettings.json que contiene muchas listas de valores "válidos" para algunos de los campos en TopLevelThing, InnerThing, etc.


public class TopLevelThingValidator : AbstractValidator<TopLevelThing>
{
    private readonly Domains _domains;

    public TopLevelThingValidator(IOptions<Domains> domains)
    {
        _domains = domains.Value; // injecting IOptions

        RuleFor(a => a.SomeField).NotNull().WithErrorCode("1");
        // etc etc


        // passing down the IOptions<Domains> here to the inner object validator
        // which was passed in by the constructor argument of the top level object
        RuleForEach(a => a.SomeListOfInnerThing)
           .SetValidator(new InnerThingValidator(domains)); 
    }

}

Pregunta : ¿Estar entrando y pasando de IOptions<Domains>esta manera es kosher? Se siente un poco raro ya que estoy haciendo todo en el constructor (que es la forma en que funciona FluentValidation).

Answer