2013-03-19 12 views
11

Ich habe IValidatableObject mehrmals durchgeführt und haben nie herausgefunden, was der Zweck ValidationContext auf die Validate-Methode der Parsen ist - meine typische IValidatableObject Implementierung sieht ungefähr so ​​aus:Was ist der Zweck von ValidationContext ist bei der Umsetzung IValidatableObject

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{ 
    if (Prop1 == Prop2) 
    { 
     yield return new ValidationResult(
       "Prop1 and Prop2 must be different.", 
       new[] {"Prop1", "Prop2"}); 
    } 
} 

Gibt es etwas, das ich vermisst habe, dass ich validationContext für verwendet hätte?

EDIT: Ich benutze ASP.NET MVC und das ist in der Klasse implementiert - nicht in der Steuerung.

Antwort

6

ValidationContext enthält IServiceProvider Eigenschaft. Es ist ein Erweiterungspunkt, um den DI-Container an Ihre Validierungsattribute und Validate-Methoden zu übergeben. Sie können es beispielsweise als Validierung für die Datenbank verwenden, ohne die Abhängigkeit von dbcontext in Ihrem Modell festzulegen.

+6

Es hilft, ein Beispiel zu geben, wie ein DI-Container in dieser speziellen Situation übergeben wird. – Stack0verflow

+0

in asp.net mvc dies kann mit der Erstellung Ihrer eigenen Validierung Anbieter getan werden. –

+3

Können Sie bitte ein Beispiel dafür geben ?? Ich stehe wirklich fest, versuche, Validierungen richtig zu machen und eine mögliche Antwort ohne Code zu sehen ist wirklich traurig :( –

6

Sie sollten Prop1 und Prop2 von validationContext abrufen. Aus Ihrer Frage ist es schwierig zu sagen, ob Sie WebForms (also Code-Bindung mit Eigenschaften) oder MVC verwenden (und wenn Sie dies in der Steuerung implementieren).

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{ 
    if (validationContext["Prop1"] == validationContext["Prop2"]) 
    { 
     yield return new ValidationResult(
       "Prop1 and Prop2 must be different.", 
       new[] {"Prop1", "Prop2"}); 
    } 
}