Il y a beaucoup d'implémentations Fluent qui fonctionnent avec Lambda pour faire des choses qui sont assez soignées. Je voudrais envelopper mon cerveau pour que je puisse commencer à créer certaines de ces choses, mais je n'ai pas encore trouvé une explication que mon cerveau comprend.Lambda Func <> et Fluent
Considérons cet exemple simple d'une personne Validator
public class PersonValidator : IValidator<Person>
{
public PersonValidator()
{
AddRule(p => p.FirstName).CannotBeNull().CannotBeBlank();
AddRule(p => p.LastName).CannotBeNull().CannotBeBlank();
}
public List<ValidationResult> Validate(Person p)
{
// pseudo...
apply all rules specified in constructor, return results
}
}
J'ai réussi à faire partie de tout cela en utilisant une méthode de travail sur mon validateur comme ça ...
public ValidationResult<T,TProp> AddRule<T,TProp>(Func<T,TProp> property)
{
... not sure what to do here. This method gives me the ability to use the lambda
... for specifying which properties i want to validate
}
I Vous pouvez ensuite créer des méthodes Extension qui étendent IValidator aux fins de CannotBeNull et CannotBeEmpty.
Donc, il semble que j'ai la première moitié et la deuxième moitié du problème, mais je ne suis pas sûr de savoir comment les réunir.
Vous cherchez une explication significative ... Je voudrais "Get It". :)
votre exemple n'a pas de sens, quand vous faites AddRule(). CannotBeNull(). CannotBeBlank() vous dites que vous voulez ajouter ces règles à vos règles de validation et de les appliquer plus tard? –
Oui, précisément. Je veux être en mesure d'utiliser AddRule suivi de n'importe quel nombre de méthodes chaînées qui appliquent la validation sur une propriété donnée de la classe. Mon défi est que je ne sais pas quoi faire à l'intérieur de "AddRule". Je sais que je dois persister dans le validateur, mais je ne sais pas comment faire ça? – ctorx