我有这个视图模型:
public class BankAccountViewModel : IValidator<BankAccountViewModel>
{
public BankAccount BankAccount { get; set; }
public void ConfigureValidation(ValidationConfiguration<StockOnHandViewModel> config)
{
config.For(m => m.BankAccount.AccountHolder);
}
}
所以课程是:
public class BankAccount
{
public string AccountHolder { get; set; }
public List<Transfer> Transfers { get; set; }
}
public class Transfer
{
public int Amount { get; set; }
}
然后我有一些验证扩展
public static class ValidationExtensions
{
public static PropertyRuleSet<TModel, TProperty> For<TModel, TProperty>(
this ValidationConfiguration<TModel> validationConfiguration,
Expression<Func<TModel, TProperty>> accessor)
{
return validationConfiguration.Add(accessor);
}
}
所以我能够为 AccountHolder 调用 For 方法config.For(m => m.BankAccount.AccountHolder);
所以这很酷。它按预期发送表达式。
列表项 Transfers 变得有点困难。
在转帐中,我可能想通过表达式发送每次转帐的金额。因此,如果我有两次转账,我想发送:
m => m.BankAccount.Transfers[0].Amount
m => m.BankAccount.Transfers[1].Amount
我知道我可以这样做:
for(int i=0; i < BankAccount.Transfers.Count; i++)
{
config.For(m => m.BankAccount.Transfers[i].Amount);
}
但是我不想一直为列表项这样做。
我真的很想For
对列表项有一种不同的方法,我可以用一些方法来调用它,它会为我做到这一点。
我在想可能是这样的:
public static PropertyRuleSet<TModel, TProperty> For<TModel, TProperty>(
this ValidationConfiguration<TModel> validationConfiguration,
Expression<Func<TModel, TProperty>> accessor, int count)
{
...
}
你可能会这样称呼它:
config.For(m => m.BankAccount.Transfers[i].Amount, BankAccount.Transfers.Count);
但是,这不起作用,因为我不确定如何在没有 i 的情况下发送表达式部分,然后稍后为每个列表项填充它。也不知道在方法中做什么
有人知道在这里做什么吗?