Пользовательская функция FluentValidation в классе Validator - PullRequest
0 голосов
/ 22 октября 2019

Используя этот пример с веб-сайта 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 не может. Здесь мне нужна помощь.

1 Ответ

1 голос
/ 22 октября 2019

Ваша функция CustomerExists должна рассматриваться как делегат. Для этого измените следующее:

Оригинал

 RuleFor(Function(x) x.CustomerID).Must(CustomerExists)

Обновление

RuleFor(Function(x) x.CustomerID).Must(AddressOf CustomerExists)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...