Используя этот пример с веб-сайта FluentValidation, я преобразовываю концепцию в VB.NET, используя свои собственные классы. Интересующая меня проблема - это Must(BeOver18)
, которая вызывает функцию protected
. Обратите внимание, что этот вызов не передает параметр BeOver18
:
public class PersonAgeValidator : AbstractValidator<Person> {
public PersonAgeValidator() {
RuleFor(x => x.DateOfBirth).Must(BeOver18);
}
protected bool BeOver18(DateTime date) {
//...
}
}
. Я создал свой собственный класс валидатора в VB.NET, используя тот же принцип, что и выше, но вместо этого для функции с именем CustomerExists
:
Public Class ContractValidator
Inherits AbstractValidator(Of ContractDTO)
Public Sub New()
RuleSet("OnCreate",
Sub()
RuleFor(Function(x) x.CustomerID).NotEmpty
' Compiler error here:
' BC30455 Argument not specified for parameter 'customerID'.....
RuleFor(Function(x) x.CustomerID).Must(CustomerExists)
End Sub
)
End Sub
Protected Function CustomerExists(customerID As Integer) As Boolean
Return CustomerService.Exists(customerID)
End Function
End Class
ВЫПУСК: Строка в VB.NET с .Must(CustomerExists)
выдает ошибку компилятора «Аргумент не указан для параметра customerID» ... ». Пример C # не передает параметр в BeOver18
. Я попробовал дополнительную анонимную встроенную функцию, чтобы попытаться передать ContractDTO.CustomerID, но она не работает, так как не распознается:
' This won't work:
RuleFor(Function(x) x.CustomerID).Must(CustomerExists(Function(x) x.CustomerID))
Я в растерянности из-за того, как пример C # может вызватьэто функция без параметра, но преобразование VB.NET не может. Здесь мне нужна помощь.