Domanda

E 'possibile utilizzare l'attributo selfvalidation con i miei convalide situato in una metadatatype? Sto usando di Enterprise Library 5 Validation Application Block.

È stato utile?

Soluzione

Come ho spiegato nella mia altra risposta, questo non è supportato dalla scatola. Tuttavia, ciò può essere ottenuto agganciando nell'ambito mediante iniezione di dipendenze e sostituire l'attuazione AttributeValidatorFactory esistente. Ho scritto un post sul mio blog su come fare questo: miscelazione Validation Application blocco Con DataAnnotation:? What About SelfValidation

Spero che questo aiuta.

Altri suggerimenti

Questo è attualmente non supportata (fuori dalla scatola) di VAB. Guardate ad esempio a questo discussione al forum EntLib. Credo che la ragione principale per questo non è supportato è perché non si può semplicemente inserire il metodo [SelfValidation] sul tipo di dati di meta e si aspettano che questo lavoro. La ragione non funziona è perché i metodi di validazione di auto in genere Convalidare membri del tipo di istanza. La firma del metodo di validazione sé non contiene l'oggetto reale per convalidare.

Un semplice lavoro intorno è chiamata nel tipo di metadati dall'entità. Per esempio:

[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));
    }
}

Questo naturalmente non è una soluzione molto pulita. VAB però è molto estensibile e la versione 5.0 solo meglio. Se si vuole si può scambiare AttributeValidationFactory esistente e sostituirlo con una versione che è in grado di farlo. Non sarà facile però.

Saluti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top