将参数传递给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',因为它不是委托类型
问题是访问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));
}
}