ASP.NET MVC3 Fluent Validation Constructor выполняется несколько раз за запрос - PullRequest
5 голосов
/ 18 октября 2011

У меня есть настройка веб-сайта ASP.NET MVC3 с использованием свободной проверки и Nentject.Код проверки работает.Тем не менее, я установил точку останова в конструкторе класса валидации и заметил, что когда я запрашиваю свое представление, использующее валидацию, конструктор получает удар несколько раз.Основываясь на очень простом тестировании, кажется, что количество попаданий в конструктор равно количеству свойств, существующих в объекте.Кто-нибудь еще сталкивался с чем-то подобным?Или кто-то может пролить больше света на то, как этот тип проверки работает за кулисами?-Спасибо

Вот конструктор ...

public class PersonValidator : AbstractValidator<Person> {
    public PersonValidator() {
        RuleFor(x => x.Id).NotNull();
        RuleFor(x => x.Name).Length(0, 10);
        RuleFor(x => x.Email).EmailAddress();
        RuleFor(x => x.Age).InclusiveBetween(18, 60);
    }
}

Вот библиотеки / ресурсы, которые я использую (я только что получил пакеты NuGet и настроил все на основе информации издве ссылки ниже):

http://fluentvalidation.codeplex.com/wikipage?title=mvc https://github.com/ninject/ninject.web.mvc.fluentvalidation

1 Ответ

4 голосов
/ 21 октября 2011

Я разобрался, как предотвратить эту проблему. Несмотря на то, что это решает мою проблему, я хотел бы получить от других информацию о том, есть ли какие-либо последствия для этого?

Итак, во второй ссылке вы увидите инструкции по настройке Ninject.

На втором шаге необходимо применить метод расширения " InRequestScope () ". Тогда конструктор будет вызываться только один раз за запрос http, который использует ваш валидатор. Это, очевидно, означает, что для каждого http-запроса создается только один экземпляр объекта validator, что имеет смысл для меня. Я не знаю, есть ли какие-либо последствия использования этого решения?

Bind(match.InterfaceType).To(match.ValidatorType).InRequestScope();
...