Выполнение проверки бизнес-объекта. Как насчет содержащихся объектов?
Я новичок в Enterprise Library. Я пытаюсь проверить бизнес-объект типа JuvenileClientContactItem
,
JuvenileClientContactItem
Сам объект содержит объекты, в данном случае два экземпляра объектов AddressType
тип.
Когда я выполняю следующий вызов для проверки JuvenileClientContactItem
Я ожидал, что все содержащиеся в нем объекты также будут проверены и все ошибки, обнаруженные в PersonType
объект будет добавлен к ValidationResults
сбор, но только проверки на JuvenileClientContactItem
Объекты были выполнены.
validationResults = validationService
.Validate(Of JuvenileClientContactItem) _
(juvenileClientContactItem, _
"JuvenileClientContactItemRuleSet", "PersonTypeRuleSet")
Вот подпись функции проверки библиотеки предприятия:
Public Shared Function Validate(Of T)(ByVal target As T, _
ByVal ParamArray rulesets() As String) _
As Microsoft.Practices.EnterpriseLibrary.Validation.ValidationResults
Чтобы подтвердить два Address
суб-объекты в пределах JuvenileClientContactItem
объект, мне нужно выполнить отдельные вызовы Validate
метод, например:
residentaddressValidationResults = validationService
.Validate(Of BusinessObjects.AddressType) _
(juvenileClientContactItem.ResidenceAddress, _
Me.View, "AddressTypeRuleSet")
Я испытываю желание написать свой собственный общий метод проверки, который использует отражение, чтобы исследовать объект, переданный для проверки, и искать содержащиеся в нем объекты, которые поддерживают самостоятельную проверку, а также выполнять вызовы и объединять результаты всех проверок в одну возвращаемую коллекцию. Есть ли лучший подход?
Редактировать:
Следуя предложению, указанному ниже, я добавил этот код:
<System.Serializable()> _
<DataContract()> _
<HasSelfValidation()> _
<ObjectValidator()> _
Public Class AddressType
... И получил ошибку, что ObjectValidatorAttribute не может быть применен, потому что атрибут недопустим в этом типе объявления.
Зачем? Как мне это исправить?
1 ответ
Вы должны украсить свойства TheJuvenileClientContactItem
введите с ObjectValidatorAttribute
, потому что Validation Application Block не будет проверять графы объектов по умолчанию (чтобы предотвратить проблемы с производительностью и исключения переполнения стека).