将参数传递给IRuleBuilder扩展方法

本文关键字:扩展 方法 IRuleBuilder 参数传递 | 更新日期: 2023-09-27 18:16:59

这就是我想做的:

RuleFor(m => m.User.State).
    StateIsValid(m => m.User.Country);

扩展方法是这样的:

public static class ValidationExtensions
{
    public static IRuleBuilderOptions<T, int?> StateIsValid<T>(this IRuleBuilder<T, int?> rule, int country)
    {
        return rule
            .Must(state => IsStateOfCountry(state, country));
    }
}

问题是我不知道如何正确传递Country参数或者我应该如何在扩展方法中指定Country参数。使用上面的代码,我得到编译错误:无法将lambda表达式转换为类型'int',因为它不是委托类型

将参数传递给IRuleBuilder扩展方法

问题是访问User的"兄弟"属性Country。如果您像这样将扩展方法从User对象中取出会怎么样呢?

RuleFor(m => m.User).
    StateIsValid();

扩展方法需要一个约束:

public static class ValidationExtensions
{
    public static IRuleBuilderOptions<TOuterClass, TUser> StateIsValid<TOuterClass, TUser>(this IRuleBuilder<TOuterClass, TUser> ruleBuilder)
        where TUser : User
    {
        return ruleBuilder
            .Must(user => IsStateOfCountry(user.State, user.Country));
    }
}