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

How to use Unity MVC & Unity WebAPI in the same ASP.Net MVC project

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

在单独使用 UnityMVC 之前,项目在 App_Start 文件夹中,class 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 class。

我执行项目时出现如下错误: “类型 Unity.WebApi.UnityDependencyResolver 似乎没有实现 Microsoft.Practices.ServiceLocation.IServiceLocator。 参数名称:commonServiceLocator".

我找到了使用 Bootstrapper class 但未使用 UnityConfig class 或 UnityMvcActivator 的不同代码示例。

在Bootrstrapper class中,类型的注册是这样的:

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

我对这一切有点迷茫,请帮助我理解并修复这个错误。

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

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

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

你也可以分开项目试试。

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

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