2011-09-15 19 views
5

tengo el siguiente código en validador:FluentValidation a 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"); 

¿Hay alguna manera de pasar el valor betLimit al método withMessage? La única solución que veo es establecer el valor de betLimit a alguna propiedad de ViewModel y luego acceder a ella en Overload con funcs. Pero es feo

Respuesta

4

Dado que Amount no se utiliza para obtener el betLimit, ¿no puede tirar el límite de apuesta a un campo cuando se activa su validador y usarlo donde quiera? Algo así como:

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

ACTUALIZACIÓN:

ahora veo que ha agregado el parámetro del modelo de vista. Parece que debería ser capaz de llegar a ella como este, basado en el tercer ejemplo, en los documentos 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

En realidad la recuperación betLimit se basa en algunas otras propiedades del mb. Solo traté de simplificar un ejemplo y lo hice un poco incorrecto – SiberianGuy

+0

Pero, ¿de dónde viene betLimit inside Debe provenir de su segundo ejemplo? – SiberianGuy

+0

Ah, mi mal, estaba centrado en la parte de WithMessage. Parece que tendrías que golpear ese servicio dos veces. Si los dos recorridos de ida y vuelta del servicio le causan dolor, podría almacenar el resultado en HttpContext ... pero no puedo imaginar que haya una forma de tomar algo de la regla Must para comunicarse con la llamada a WithMessage. –

Cuestiones relacionadas