Для нестатического поля требуется проверка класса с FluentValidation, возвращающего объект

#c# #.net #.net-core #fluentvalidation

#c# #.net #.net-core #fluentvalidation

Вопрос:

Я пытаюсь добавить FluentValidator в свою рабочую службу .net core 3.1. Я создал класс, в котором будут храниться мои файлы, обработанные CSV.

    public partial class Subjects
    {
        public Guid SubjectId { get; set; }
        public string Code { get; set; }
        public Guid OrganizationId { get; set; }
        public string PreferredName { get; set; }
        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string LastName { get; set; }
        public DateTime? DateOfBirth { get; set; }
        public string Gender { get; set; }
        public string LastNameInitial { get; set; }
        public string CodeDisplay { get; set; }
        public Guid? RaceId { get; set; }
        public Guid? MaritalStatusId { get; set; }
        public Guid? StatusId { get; set; }
        public string Rank { get; set; }
        public string Email { get; set; }
        public string MobilePhone { get; set; }
        public bool MobilePhoneDoNotLeaveMsg { get; set; }
        public bool MobilePhoneDoNotText { get; set; }
        public string WorkPhone { get; set; }
        public bool WorkPhoneDoNotLeaveMsg { get; set; }
    }
  

Затем, согласно документации, я создаю класс проверки, реализующий интерфейс AbstractValidator:

 class SubjectsValidation : AbstractValidator<Subjects>
{
    public SubjectsValidation()
    {
        RuleFor(subject => Subjects.FirstName).NotEmpty();
    }
}
  

Согласно документации, мне нужно добавить правила в конструктор. Однако, когда я передаю лямбда-выражение для правила, я получил эту ошибку:

«Ссылка на объект требуется для нестатического поля, метода или свойства»

Поэтому я изменил конструктор следующим образом:

 class SubjectsValidation : AbstractValidator<Subjects>
{
    public SubjectsValidation()
    {
        Subjects subject = new Subjects();
        RuleFor(x=>subject.FirstName).NotEmpty();
    }
}
  

Что привело к ошибке, но когда я пытаюсь вызвать проверку, я получаю сообщение об ошибке при создании экземпляра объекта для тестирования:

 Subjects subject = new Subjects();
            subject.FirstName = "John";
            SubjectsValidation validator = SubjectsValidation();
  

Это возвращает сообщение об ошибке, потому что мне пришлось создать новую тему при проверке темы, чтобы она возвращала сбой. Поэтому, следуя инструкциям на веб-сайте, я просто не могу заставить это работать. Как мне это исправить?

Комментарии:

1. Вам необходимо использовать параметр, указанный в выражении: subject => subject.FirstName

2. Спасибо, что сделали это. Я был в сорняках и нуждался в другой паре глаз. Спасибо. Добавьте это в качестве ответа, и я отмечу его как таковой, если хотите.

Ответ №1:

RuleFor Метод ожидает делегата. Итак, ваша первая попытка сработает, если вы используете параметр делегата внутри тела ( subject вместо Subjects ):

 class SubjectsValidation : AbstractValidator<Subjects> 
{ 
    public SubjectsValidation()
    { 
        RuleFor(subject => subject.FirstName).NotEmpty(); 
    } 
}