1

Я пытаюсь добавить WebAPI в существующий проект ASP.Net MVC, и мой вопрос касается единства:Как использовать Unity MVC & Unity WebAPI в том же проекте ASP.Net MVC

Перед с UnityMVC в одиночку , проект был в папке App_Start, класс UnityConfig со следующим кодом:

container.RegisterType<IUnitOfWork, UnitOfWork>(new PerRequestLifetimeManager()); 
container.RegisterType<IDataContext, tfe_schemaContext>(new PerRequestLifetimeManager()); 

container.RegisterType<IPrintJobService, PrintJobService>(new PerRequestLifetimeManager()); 
container.RegisterType<IRepository<print_job>, Repository<print_job>>(new PerRequestLifetimeManager()); 

Чтобы использовать WebAPI, я добавил UnityWebAPI через NuGet и это действие добавлен класс UnityMvcActivator в папке App_Start.

Следующая ошибка отображается, когда я выполнить проект: «Тип Unity.WebApi.UnityDependencyResolver не появляется для реализации Microsoft.Practices.ServiceLocation.IServiceLocator имени параметров:. CommonServiceLocator».

Я нашел разные примеры кода, используя класс Bootstrapper, но без использования класса UnityConfig или UnityMvcActivator.

В классе Bootrstrapper, регистрация типов, как это:

container.RegisterType<IProductServices, ProductServices>().RegisterType<UnitOfWork>(new HierarchicalLifetimeManager()); 

Я немного потерял со всем этим, пожалуйста, помогите мне понять и исправить эту ошибку.

+0

Может предоставить небольшое руководство по их использованию: https://www.devtrends.co.uk/blog/using-unity.mvc5-and-unity.webapi-together-in-a-project –

ответ

6

Кажется, вы используете неправильные или устаревшие пакеты NuGet. Вместо этого попробуйте использовать официальные пакеты Unity. Поэтому удалить все пакеты, относящиеся к Unity и добавьте следующие пакеты в Package Manager Console:

Install-Package Unity.Mvc 
Install-Package Unity.AspNet.WebApi 

Теперь у вас есть один контейнер Unity в проекте, который хорошо работает с MVC и WebAPI.

+0

Вы правы , Я использовал единство, а не единство.mvc, я бы не нашел это в одиночку, спасибо вам большое! После удаления и повторной установки того, что вы рекомендовали, система обнаружила ошибку в отношении ServiceLocation, я установил Microsoft.Practices.ServiceLocation через NuGet и теперь работает нормально. – Sounouk

+0

Привет Сэм, от NuGet. Я вижу, что есть 3 пакета: Unity.Mvc, Unity.Mvc4, Unity.Mvc5. По тому же вопросу, что и Sonouk (оригинальный плакат), мой вопрос заключается в том, почему мы используем Unity.Mvc вместо Unity.Mvc5 или Unity.Mvc4? Пакет Unity.Mvc более обобщен, чем другие 2? –

+0

@ Thomas.Benz Пакеты, такие как 'Unity.MVC4' или' Unity.MVC5', являются неофициальными пакетами. Поэтому они не поддерживаются Microsoft. Большинство из них устарели или несовместимы друг с другом. Если вы посмотрите последнюю публичную дату «Unity.MVC5», например, вы можете легко увидеть, что этот пакет не обновляется около 2 лет. Но официальные пакеты постоянно обновляются. –

0

Вы также можете попробовать, отделив проекты.

Один проект четыре кода MVC и другой проект для вашего кода WebAPI. Таким образом вы установите Unity.MVC в свой проект MVC и Unity.WebAPI в свой проект WebAPI.

После этого вы можете без проблем использовать сервисы из своего приложения MVC.

Смежные вопросы