Как переопределить методы расширения fluentvalidator? - PullRequest
0 голосов
/ 11 мая 2019

Я использую .NET ASP.NET MVC 4. Для проверки я использую Fluent validation.Я новичок в этом.Как я могу переопределить метод класса DefaultValidatorExtensions ?

Я нашел одно решение.

Создать basevalidator класс, который унаследовал оба IValidatorInterceptor и AbstractValidator .Но я не понимаю, как переопределить методы проверки.

На самом деле я хочу изменить сообщение по умолчанию для любого метода проверки.Сообщение является общим для всех атрибутов для некоторых проверок, поэтому я хочу переопределить эти методы проверки, вместо этого использовать 'WithMessage ()'.

Например:

RuleFor(x => x.Name).NotEmpty(); вернет ""Имя «не должно быть пустым».Но я хочу сообщение «Обязательно».

1 Ответ

1 голос
/ 13 мая 2019

Я нашел ответ по этой ссылке.Я думаю, что это может помочь вам: https://fluentvalidation.net/localization#default-messages

Если вы хотите заменить все (или некоторые) сообщения по умолчанию FluentValidation, вы можете сделать это, внедрив пользовательскую версию интерфейса ILanguageManager.

Например, сообщение по умолчанию для валидатора NotNull «{PropertyName}» не должно быть пустым.Если вы хотите заменить это сообщение для всех применений валидатора NotNull в вашем приложении, вы можете написать собственный менеджер языков:

public class CustomLanguageManager : FluentValidation.Resources.LanguageManager {
  public CustomLanguageManager() {
    AddTranslation("en", "NotNullValidator", "'{PropertyName}' is required.");
  }
}

Здесь у нас есть собственный класс, который наследуется от базового LanguageManager.В его конструкторе мы вызываем метод AddTranslation, передавая язык, который мы используем, имя валидатора, который мы хотим переопределить, и новое сообщение.

Как только это будет сделано, мы можем заменить LanguageManager по умолчанию наустановка свойства LanaguageManager в статическом классе ValidatorOptions во время процедуры запуска вашего приложения:

ValidatorOptions.LanguageManager = new CustomLanguageManager();

Это простой пример, который заменяет только одно сообщение валидатора только на английском языке, но может быть расширен для замены сообщений для всех языков,Вместо того, чтобы наследовать от LanguageManager по умолчанию, вы также можете напрямую реализовать интерфейс ILanguageManager, если хотите загружать сообщения из совершенно другого места, отличного от местоположения по умолчанию FluentValidation (например, если вы хотите хранить сообщения по умолчанию FluentValidation в базе данных).

Конечно, если все, что вы хотите сделать, это заменить это сообщение для однократного использования валидатора, то вы можете просто использовать WithMessage ("'{PropertyName}' требуется");

...