Here's a sample app with your suggestion which returns the following error msg:
The type arguments for method 'FluentValidation.DefaultValidatorOptions.When<T,TProperty>(FluentValidation.IRuleBuilderOptions<T,TProperty>, System.Func<T,bool>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Diagnostics; using FluentValidation; using FluentValidation.Results; static class MyConsoleApp { public static void Main() { MyObjectValidator validator = new MyObjectValidator(); ValidationResult results = validator.Validate(new MyObject()); if (results.IsValid) { Console.WriteLine("Valid"); } else { Console.WriteLine("Invalid"); } } } public class MyObjectValidator : AbstractValidator<MyObject> { public MyObjectValidator() { FluentValidation.DefaultValidatorOptions.When(x => x.anEnum == MyObject.MyEnum.First, () => { RuleFor(x => x.someDecimal).Equal(1); }); //RuleFor(x => x.anEnum).SetValidator(new ValidatorWrapper<MyObject>()).When(x => x.anEnum == MyObject.MyEnum.First); } } public class MyObject { public enum MyEnum : int { First = 0, Second = 1, Third = 2 } public decimal someDecimal { get; set; } public MyEnum anEnum { get; set; } public MyObject() { anEnum = MyEnum.First; someDecimal = 5; } }