Метадататипы с самоутверждением с использованием проверки прикладного блока

StackOverflow https://stackoverflow.com/questions/3687352

Вопрос

Можно ли использовать атрибут самоофиса с моими валидациями, расположенными в метадатномпе? Я использую блок подачи заявки на корректирующую библиотеку 5.

Это было полезно?

Решение

Как я объяснил в другом ответе, это не поддерживается из коробки. Однако это может быть достигнуто путем подключения к структуре, используя инъекцию деконтности и замените существующие AttributeValidatorFactory реализация. Я написал сообщение в моем блоге о том, как это сделать: Смешивание прикладного блока проверки с Датанотацией: как насчет самооскочения?

Надеюсь, это поможет.

Другие советы

В настоящее время это не поддерживается (из коробки) вагонкой. Ищите экземпляр в эта нить На форуме Entlib. Я думаю, что главная причина, по которой это не поддерживается, заключается в том, что вы не можете просто разместить метод [SelfValidation] на тип META и ожидаю, что это будет работать. Причина, по которой он не будет работать, заключается в том, что методы самооценки, как правило, определяют элементы экземпляра типа. Подпись метода самооценки не содержит фактического объекта для проверки.

Простая работа вокруг звонка в тип метаданных из объекта. Например:

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

Это, конечно, не очень чистое решение. Ваб однако это очень выдвижная, а версия 5.0 становится только лучше. Если вы хотите, вы можете поменять существующим AttributeValidationFactory и заменить его версией, которая может сделать это. Это не будет легко.

Ваше здоровье

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top