Existen muchas implementaciones Fluent que funcionan con Lambdas para hacer cosas que son bastante ordenadas. Me gustaría adaptar mi cerebro para que pueda comenzar a crear algunas de estas cosas, pero aún no he encontrado una explicación que mi cerebro entienda.Lambda Func <> y Fluent
consideran este ejemplo simple de una persona Validador
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
}
}
he logrado conseguir parte de todo esto de trabajo utilizando un método en mi Validador así ...
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 puede crear métodos de extensión que extienden IValidator para los propósitos de CannotBeNull y CannotBeEmpty.
Parece que tengo la primera mitad y la segunda mitad del problema, pero no estoy seguro de cómo juntarlos.
Buscando una explicación significativa ... Me gustaría "obtenerlo". :)
tu ejemplo no tiene sentido, cuando lo hace AddRule(). CannotBeNull(). CannotBeBlank() está diciendo que desea agregar esas reglas a las reglas de validación y aplicarlas más adelante? –
Sí, precisamente. Deseo poder usar AddRule seguido de cualquier cantidad de métodos encadenados que apliquen la validación en una propiedad dada de la clase. Mi desafío es que no sé qué hacer dentro de "AddRule". Sé que necesito persistir en el validador pero no sé cómo hacer eso. – ctorx