2011-09-15 15 views
5

ho il seguente codice nel validatore:FluentValidation parametro pass per 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"); 

C'è un modo per passare il valore betLimit metodo withMessage? L'unica soluzione che vedo è di impostare il valore betLimit su alcune proprietà di ViewModel e quindi accedervi in ​​overload WithMessage con funcs. Ma è brutto.

risposta

4

Dal Amount non viene utilizzato per ottenere il betLimit, non è possibile tirare il limite di puntata in un campo quando il validatore si attiva e usarlo dove si desidera? Qualcosa di simile:

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:

Vedo ora che è stato aggiunto il parametro dal modello di vista. Sembra che si dovrebbe essere in grado di raggiungere in questo modo, sulla base del terzo esempio nella documentazione 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

realtà betLimit recupero si basa su alcune altre proprietà di mb. Ho solo provato a semplificare un esempio e ho fatto un po 'di torto – SiberianGuy

+0

Ma dove punta betLimit dentro Deve provenire dal tuo secondo esempio? – SiberianGuy

+0

Ah mio male, ero concentrato sulla parte WithMessage. Sembra che tu debba colpire quel servizio due volte. Se i due roundtrip di servizio causano dolore, è possibile memorizzare nella cache il risultato di ciò in HttpContext ... ma non riesco a immaginare che ci sia un modo per prendere qualcosa dalla regola Must per comunicare con la chiamata WithMessage. –

Problemi correlati