2011-11-15 10 views
5

Sto utilizzando Fluent Validation nel mio progetto.
Nel mio ViewModel ho una proprietà che è di tipo stringa, i valori validi sono solo stringa che rappresenta numeri interi positivi.
Quindi, ho creato un semplice IntegerValidator che controlla se la stringa può essere analizzata o meno in un numero intero. Questo funziona.
problema è, come per aggiungere la regola che deve essere un numero intero positivo? Vorrei usare lo esistente Greater Than Validator, ma concatenarlo alla regola per la mia proprietà stringa lo paragonerei come string, non come analizzato int. Come ottenere questo?Concatenamento di regole che dipendono l'una dall'altra

Esempio di quello che vorrei fare (notare che il ToInt()):

RuleFor(x => x.BatchNumber).SetValidator(new IntegerValidator()) 
          .ToInt().GreaterThan(0); 
+0

Questo fa davvero senso! Tuttavia, mi chiedo quale dovrebbe essere il ruolo di ToInt. Come la vedo io, dovrebbe convertire una '' RuleBuilder in un '' RuleBuilder e fare in modo che il valore convalidato viene convertito in 'int' in fase di validazione. Ma ... la catena del metodo dovrebbe restituire un 'RuleBuilder '. Destra? Quindi, ci deve essere un modo per istruire consecutivi 'regole int' (come' GreaterThan') per fare una validazione 'int', ma restituire un' rulebuilder STRING'. Temo che questo sia al di là delle attuali capacità di FluentValidation. –

+0

@GertArnold: Beh, il 'ToInt' non ha molto senso, penso. In realtà non mi interessa * come * funzionerà, solo * che * posso usare 'GreaterThan' e che un int è passato a' GreaterThan'. –

+0

Ok, il mio punto principale è che nella mentalità corrente di Fluent Validation potrebbe essere un problema concettuale. –

risposta

1

Si può sempre utilizzare un metodo personalizzato ...

RuleFor(x=>x.BatchNumber).Must(BeAPositiveIntegerString); 

private bool BeAPositiveIntegerString(string batchNumber) 
{ 
    // check both parse ability and greater than (once parsed) 
} 

Meno riutilizzabilità, ma avrebbe funzionato ...

+0

Certo, posso farlo senza domande. Ma è esattamente quello che voglio evitare e perché ho chiesto in primo luogo :) –

+0

Non riesco a trovare un modo per lanciare un 'RuleBuilder 'su un' RuleBuilder '. La gerarchia di quelle classi richiede un profondo cambiamento nel codice di FluentValidator, ma ne vorrei parlare con esse; Posso vedere casi d'uso simili. In questo caso particolare (per darti un'altra non risposta), puoi sempre concatenare un validatore che controlla un segno negativo nella stringa. ;) – drharris

Problemi correlati