Размножение:
Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations
Module Module1
Sub Main()
Dim type = GetType(Contact)
TypeDescriptor.AddProviderTransparent(
New AssociatedMetadataTypeTypeDescriptionProvider(type), type)
Dim contact As New Contact
Dim context As New ValidationContext(contact, Nothing, Nothing)
Dim errors As New List(Of ValidationResult)
Dim result = Validator.TryValidateObject(contact, context, errors, True)
End Sub
End Module
<CustomValidation(GetType(Contact.ContactMd), "*********************")>
<MetadataType(GetType(Contact.ContactMd))>
Public Class Contact
Public Property Email As String
Public Property EmailRepeat As String
Public Class ContactMd
'<Required()>
Public Property Email
'<Required()>
Public Property EmailRepeat
Public Shared Function ValidateEmails(ByVal contact As Contact) _
As ValidationResult
Return If(contact.Email = contact.EmailRepeat,
ValidationResult.Success,
New ValidationResult("Fail!"))
End Function
End Class
End Class
Приведенный выше код вызовет исключение:
The CustomValidationAttribute method '*********************' does not exist in type 'ContactMd' or is not public and static.
Это исключение оправдано и является признаком того, что все работает.
Как только я раскомментирую атрибуты Required
в свойствах класса Md, исключение не будет выброшено, что означает, что система проверки не проверяет как атрибуты с типом свойства, так и атрибуты уровня класса.
Есть обходной путь?