将参数传递给IRuleBuilder扩展方法

时间:2015-10-09 11:57:04

标签: c# fluentvalidation

这就是我想要做的事情:

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',因为它不是委托类型

1 个答案:

答案 0 :(得分:0)

问题是访问&#34;兄弟&#34; Country之外的User属性。如果您将扩展方法改为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));
    }

}