Для нестатического поля требуется проверка класса с возвращаемым объектом 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; }
    }

Затем согласно документации я создаю класс Validation, реализующий интерфейс 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();

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


person john    schedule 13.11.2020    source источник
comment
Вам нужно использовать параметр, представленный в выражении: subject => subject.FirstName   -  person devNull    schedule 13.11.2020
comment
Спасибо, что сделал это. Я был в сорняках и нуждался в другой паре глаз. Спасибо. Добавьте это как ответ, и я отмечу его как таковой, если хотите.   -  person john    schedule 13.11.2020


Ответы (1)


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

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