#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();
}
}