2011-09-15 8 views
5

Mam następujący kod w walidator:FluentValidation podał parametr WithMessage

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"); 

Czy istnieje jakiś sposób, aby przekazać wartość betLimit metody WithMessage? Jedynym rozwiązaniem, które widzę, jest ustawienie wartości betLimit na pewną właściwość ViewModel, a następnie dostęp do niej w OverMessage przeciążenie funcs. Ale to jest brzydkie.

Odpowiedz

4

Od Amount nie jest używany do uzyskania betLimit, czy nie możesz przeciągnąć limitu zakładu na pole, gdy walidator uruchomi się i użyje go w dowolnym miejscu? Coś jak:

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)); 
    ... 
} 

UPDATE:

teraz widzę, że dodaje param z modelu widoku. Wygląda na to, powinieneś być w stanie dostać się do niego w ten sposób, w oparciu o trzeci przykład w docs FluentValidation here:

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)); 
     ... 
    } 
+0

Właściwie betLimit pobieranie opiera się na niektórych innych właściwości mb. Po prostu próbowałem uprościć przykład i nieco go zepsułem. – SiberianGuy

+0

Ale skąd betLimit wewnątrz musi pochodzić z twojego drugiego przykładu? – SiberianGuy

+0

Ah my bad, byłem skoncentrowany na części WithMessage. Wygląda na to, że musiałbyś dwukrotnie trafić w tę usługę. Jeśli dwie obiegi serwisowe powodują ból, możesz buforować wynik tego w HttpContext ... ale nie mogę sobie wyobrazić, że istnieje sposób pobrania czegoś z reguły Must, aby komunikować się z wywołaniem WithMessage. –

Powiązane problemy