Как остановить Ninject от переопределения пользовательских DataAnnotationsModelValidatorProvider? - PullRequest
7 голосов
/ 02 декабря 2011

У меня есть собственный DataAnnotationsModelValidatorProvider для более динамичной проверки модели, чем просто добавление атрибутов. Я попытался добавить свой файл в global.asax.cs так:

ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new AttributeValidatorProvider());

Но как только я загружаю свою форму, я получаю сообщение об ошибке: «Имена типов проверки в ненавязчивых правилах проверки клиента должны быть уникальными. Следующий тип проверки был просмотрен несколько раз: обязательно».

Согласно комментарию к этому блогу , это связано с тем, что Ninject переопределяет пользовательских провайдеров валидаторов.

Я довольно новичок в MVC и, похоже, не могу найти способ сказать Ninject, что я тоже принимаю своих нестандартных провайдеров, как мне решить эту проблему?

Для справки: я не хочу использовать Fluentvalidation.net, я хочу придерживаться стандартных проверок MVC (по большей части).

Ответы [ 2 ]

8 голосов
/ 13 декабря 2011

Изменить регистрацию провайдера на

Rebind<ModelValidatorProvider>().To<AttributeValidatorProvider>();
7 голосов
/ 19 апреля 2015

Есть другой способ (наверняка работает в MVC 4):

Найдите свой класс, который наследует интерфейс IdependencyResolver и добавьте в конструктор _kernel.Unbind<ModelValidatorProvider>(); - вы просто отсоединяете валидатор проверки, и не должно быть разделенияс валидатором по умолчанию.

В моем случае мой конструктор выглядит так:

public NinjectDependencyResolver()
{
       _kernel = new StandardKernel();
       _kernel.Unbind<ModelValidatorProvider>();
       AddBindings();
}
...