如何使用Unity MVC& Unity WebAPI在同一个ASP.Net MVC项目中

时间:2015-09-30 10:23:02

标签: asp.net-mvc unity-container asp.net-web-api2 bootstrapper

我试图将WebAPI添加到现有的ASP.Net MVC项目中,我的问题是关于Unity:

在单独使用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,我通过NuGet添加了UnityWebAPI,此操作在App_Start文件夹中添加了UnityMvcActivator类。

执行项目时显示以下错误: &#34;类型Unity.WebApi.UnityDependencyResolver似乎没有实现Microsoft.Practices.ServiceLocation.IServiceLocator。 参数名称:commonServiceLocator&#34;。

我使用Bootstrapper类找到了不同的代码示例,但没有使用UnityConfig类或UnityMvcActivator。

在Bootrstrapper类中,类型的注册如下:

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

我对这一切有点失落,请帮助我理解并解决此错误。

2 个答案:

答案 0 :(得分:6)

您似乎使用了错误或过时的NuGet包。请尝试使用Unity的官方软件包。因此,删除与Unity相关的所有软件包,并在软件包管理器控制台中添加以下软件包:

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

现在,您的项目中有一个Unity容器,可以很好地与MVC和WebAPI配合使用。

答案 1 :(得分:0)

您也可以尝试分离项目。

一个项目四个MVC代码和另一个WebAPI代码项目。这样,您将在MVC项目中安装Unity.MVC,在WebAPI项目中安装Unity.WebAPI。

之后,您可以毫无问题地使用MVC应用程序中的服务。