【问题标题】:How to use Unity MVC & Unity WebAPI in the same ASP.Net MVC project如何在同一个 ASP.Net MVC 项目中使用 Unity MVC 和 Unity WebAPI
【发布时间】:2015-09-30 10:23:02
【问题描述】:

我正在尝试将 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 类。

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

我发现了使用 Bootstrapper 类但未使用 UnityConfig 类或 UnityMvcActivator 的不同代码示例。

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

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

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

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

  • 你说得对,我用的是unity而不是unity.mvc,我一个人是找不到这个的,非常感谢!删除并重新安装您推荐的内容后,系统显示有关 ServiceLocation 的错误,我通过 NuGet 安装了 Microsoft.Practices.ServiceLocation,现在它工作正常。
  • 嗨 Sam,我从 NuGet 看到有 3 个包:Unity.Mvc、Unity.Mvc4、Unity.Mvc5。对于与 Sonouk (原始海报)相同的问题,我的问题是为什么我们使用 Unity.Mvc 而不是 Unity.Mvc5 或 Unity.Mvc4 包? Unity.Mvc 包是否比其他两个包更通用?
  • @Thomas.Benz 像 Unity.MVC4Unity.MVC5 这样的包是非官方的包。因此,它们不由 Microsoft 维护。它们中的大多数已经过时或彼此不兼容。例如,如果您查看 Unity.MVC5 的最后公开日期,您可以很容易地看到这个包大约 2 年没有更新。但官方包正在不断更新中。
  • 山姆,谢谢你的回答。我是 Unity DI 的新手。我想了解更多关于它的信息,特别是如何实现 2 IoC 一个 Asp.net 项目,其中包括 Unity.Mvc 和 Unity.AspNet.WebApi;换句话说,该项目支持 MVC 和 Web Api 功能。如果可能,您能否向我展示一些资源或代码,以便在这样的 asp.net 项目中逐步实现 2 Unity IoC(用于 MVC 和 asp.net WebApi)?
  • @Thomas.Benz 你不需要为WebAPIMVC 实现单独的容器。您可以使用一个共享容器。如果您还有其他问题,请作为单独的问题提出,并提供适当的详细信息。如果你告诉我这个问题,我会尽力回答。
【解决方案2】:

您也可以尝试将项目分开。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    相关资源
    最近更新 更多