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 важно.

Другие вопросы по тегам