Frage

Ist es möglich, das selfvalidation Attribut mit meinem Validierungen in einem MetadataType gelegen zu benutzen? Ich verwende Enterprise Library 5 Validation Application Block.

War es hilfreich?

Lösung

Wie ich in meiner anderen Antwort erklärt, dies ist nicht die Box unterstützt werden. depedency Injektion mit und ersetzen Sie die vorhandene AttributeValidatorFactory Implementierung Dies kann jedoch durch Einhaken in den Rahmen erreicht werden. Ich geschrieben einen Beitrag auf meinem Weblog, wie dies zu tun: Mixing Validierung Application Block mit DataAnnotation: Was über SelfValidation

Ich hoffe, das hilft.

Andere Tipps

Dies wird derzeit nicht unterstützt (aus der Box) von VAB. Schauen Sie zum Beispiel unter diesem Thread am EntLib Forum. Ich denke, der Hauptgrund, warum dies wird nicht unterstützt, da dadurch die [SelfValidation] Methode auf dem Meta-Datentyp nicht einfach platzieren und erwarten, dass diese an der Arbeit. Grund wird es nicht funktionieren, weil Selbstvalidierungsmethoden werden in der Regel Validate Instanz Mitglieder des Art. Die Unterschrift des Selbstvalidierungsmethode nicht das eigentliche Objekt zu validieren enthält.

Eine einfache Arbeit ist um Anruf in den Meta-Datentyp aus der Einheit. Zum Beispiel:

[MetadataType(typeof(InvoiceMetaData))]
[HasSelfValidation]
public partial class Invoice
{
    public string Name{ get; set; }

    public int Price { get; set; }

    [SelfValidation]
    public void CustomValidate(ValidationResults results)
    {
        // Call into the meta data class
        InvoiceMetaData.Validate(this, results);
    }
}

public class InvoiceMetaData
{
    [StringLengthValidator(1, 10, Tag = "Name")]
    string Name { get; set; }

    [RangeValidator(0, RangeBoundaryType.Inclusive, 0,
        RangeBoundaryType.Ignore, Tag = "Price")]
    int Price { get; set; }

    public static void CustomValidate(Invoice instance,
        ValidationResults results)
    {
        results.AddResult(new ValidationResult("ErrorMessage1",
            instance, "", "", null));
    }
}

Das ist natürlich nicht eine sehr saubere Lösung. VAB ist jedoch sehr erweiterbar und Version 5.0 nur besser. Wenn Sie möchten, können Sie tauschen AttributeValidationFactory bestehende und ersetzen Sie es mit einer Version, die dies tun kann. Es wird nicht leicht sein, aber.

Prost

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top