Метадататипы с самоутверждением с использованием проверки прикладного блока
Вопрос
Можно ли использовать атрибут самоофиса с моими валидациями, расположенными в метадатномпе? Я использую блок подачи заявки на корректирующую библиотеку 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
и заменить его версией, которая может сделать это. Это не будет легко.
Ваше здоровье