7

バリデーターに次のコードがあります。

RuleFor(mb => mb.Amount).
Must((mb, amount) =>
                {
                   var betLimit = _battlesService.GetBetLimit(mb.BattleId);

                   mb.Amount <= betLimit;
                }).
WithMessage("Bet should be less than {0}", "bet limit value should be placed here");

betLimit値をWithMessageメソッドに渡す方法はありますか?私が見る唯一の解決策は、betLimit値をViewModelのプロパティに設定し、関数を使用してWithMessageオーバーロードでそれにアクセスすることです。しかし、それは醜いです。

4

1 に答える 1

4

Amountは を取得するために使用されていないため、betLimitバリデーターが起動したときにベット制限をフィールドに引き込み、好きな場所で使用できませんか? 何かのようなもの:

public ViewModelValidator(IBattlesService battlesService)
{
    var betLimit = battlesService.GetBetLimit();

    RuleFor(mb => mb.Amount).
    Must((mb, amount) =>
                    {
                       mb.Amount <= betLimit;
                    }).
    WithMessage(string.Format("Bet should be less than {0}", "bet limit value should be placed here", betLimit));
    ...
}

アップデート:

ビューモデルからパラメーターを追加したことがわかりました。ここの FluentValidation ドキュメントの 3 番目の例に基づいて、次のようにアクセスできるはずです。

    public ViewModelValidator(IBattlesService battlesService)
    {
        RuleFor(mb => mb.Amount).
        Must((mb, amount) =>
                        {
                           mb.Amount <= betLimit;
                        }).
        WithMessage("Bet should be less than {0}", mb => battlesService.GetBetLimit(mb.BattleId));
        ...
    }
于 2011-09-16T20:54:15.320 に答える