Ninject.Web.Mvc.FluentValidation и FluentValidation.MVC4
Я попытался настроить Ninject.Web.Mvc.FluentValidation в моем проекте ASP.NET MVC4, как показано ниже:
var ninjectValidatorFactory = new NinjectValidatorFactory(kernel);
//ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(new NinjectValidatorFactory(kernel)));
FluentValidationModelValidatorProvider.Configure(x => x.ValidatorFactory = ninjectValidatorFactory);
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
но я получаю следующие ошибки:
Error 1 The type 'FluentValidation.ValidatorFactoryBase' is defined in an assembly that is not referenced. You must add a reference to assembly 'FluentValidation, Version=2.0.0.0, ...
Error 2 Cannot implicitly convert type 'Ninject.Web.Mvc.FluentValidation.NinjectValidatorFactory' to 'FluentValidation.IValidatorFactory'. An explicit conversion exists (are you missing a cast?)
Я вижу пакет NuGet для Ninject.Web.Mvc.FluentValidation версии 3.0.0.0, и ошибка говорит мне, что он ищет версию 2 FluentValidation для ее зависимости.
Если я устанавливаю пакет NuGet только для Ninject.Web.Mvc.FluentValidation, то он устанавливает зависимость FluentValidation v2, а не версию 3.4.6.
но я также могу увидеть здесь: https://github.com/ninject/ninject.web.mvc.fluentvalidation/commit/82096d0afd15c41d01c09fd47f4247682261768e заметку об обновлении проекта для версии 3.4.6
В настоящее время я использую NuGet для добавления пакета FluentValidation.MVC4 в свой проект, а затем добавляю после него Ninject.Web.Mvc.FluentValidation (который находит, что зависимость уже существует, и не добавляет ее).
Я вижу, что пакет NuGet последний раз был опубликован 1 апреля 2013 года, но когда я смотрю на файл.nuspec в моем проекте, он показывает
<dependency id="FluentValidation" version="3.2.0.0" />
Что-то я сделал не так с этой настройкой? или как я могу заставить это работать через консоль менеджера пакетов для обновления версии зависимости?
2 ответа
ОБНОВЛЕНИЕ: причина этого в том, что Ninject.Web.Mvc.FluentValidation
использует подписанную версию FluentValidation
который строго назван.
У Дэвида Эббо есть хороший пост о строгих именах и перенаправлениях связывания здесь http://blog.davidebbo.com/2011/01/nuget-versioning-part-3-unification-via.html
Я до сих пор не удосужился сделать это, чтобы решить мою проблему, пакет NuGet имеет только 1 класс, NinjectValidatorFactory
так что стоит просто реализовать свой.
Чтобы исправить мою проблему сейчас я поставил NinjectValidatorFactory
класс в мой собственный проект. Мне кажется, что текущий пакет NuGet требует дальнейшего обновления, прежде чем он будет использовать FluentValidation 3.4.6.
Введите эти коды в консоли диспетчера пакетов:
Install-Package FluentValidation-Signed
Install-Package FluentValidation.MVC3-Signed -IgnoreDependencies
Install-Package Ninject.Web.Mvc.FluentValidation -IgnoreDependencies
-IgnoreDependencies важно.