Es gibt viele Fluent-Implementierungen, die jetzt mit Lambdas arbeiten, um Dinge zu tun, die ziemlich ordentlich sind. Ich möchte mein Gehirn darum herumschlingen, damit ich anfangen kann, einige dieser Dinge zu schaffen, aber ich muss noch eine Erklärung finden, die mein Gehirn versteht.Lambda Func <> und Fluent
Betrachten Sie dieses einfache Beispiel eines I Person 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
}
}
Ich habe es geschafft, Arbeitsteil von all dies zu erhalten, ein Verfahren auf meinem Validator wie dies mit ...
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
}
kann dann Erweiterungsmethoden erstellen, die IValidator für die Zwecke von CannotBeNull und CannotBeEmpty erweitern.
So scheint es, habe ich die erste Hälfte und die zweite Hälfte des Problems, aber ich bin mir nicht sicher, wie man sie zusammenbringt.
Auf der Suche nach einer sinnvollen Erklärung ... Ich möchte "Get it". :)
Ihr Beispiel macht keinen Sinn, wenn Sie das tun addrule(). CannotBeNull(). CannotBeBlank() sagen, Sie möchten, diese Regeln zu Ihren Validierungsregeln hinzufügen und wende sie später? –
Ja, genau. Ich möchte in der Lage sein, AddRule zu verwenden, gefolgt von einer beliebigen Anzahl von verketteten Methoden, die eine Validierung für eine bestimmte Eigenschaft der Klasse anwenden. Meine Herausforderung ist, dass ich nicht weiß, was ich in "AddRule" tun soll. Ich weiß, dass ich diese im Validator bestehen muss, aber ich weiß nicht, wie man das macht? – ctorx