【问题标题】:Using WebApi and structure map dependency injection使用 WebApi 和结构图依赖注入
【发布时间】:2017-12-11 12:08:07
【问题描述】:

虽然有很多关于堆栈溢出的问题与我的这个问题相似,但没有人解决我的问题

我使用的是 MVC4 互联网应用程序,其中我有很少的 MVC 控制器,而对于依赖注入,我使用的是 Structure map。虽然依赖注入适用于 MVC 控制器,但是当我在同一个 MVC 互联网应用程序中添加 WebApi 控制器并在 WebApi 控制器的构造函数中使用与我在 MVC 控制器中使用的相同的参数时,但依赖注入不适用于 WebApi 控制器,虽然如果我不对 WebApi 控制器(无参数构造函数)使用依赖注入,那么它可以正常工作,但是对于 WebApi 依赖注入(参数化构造函数)它会抛出错误No parameter less constructor is found

没有为 Internet(MVC 应用程序)中的 WebApi 控制器注入结论依赖项。

很少有文章建议使用DependencyResolver.SetResolver()。我用过但没有解决问题。

【问题讨论】:

    标签: asp.net-mvc-4 asp.net-web-api structuremap


    【解决方案1】:

    WebApi 控制器不工作的原因如下:

    由于 MVC 控制器使用不同的 DependenyResolver 实例,该实例是 System.Web.MVC .dll 的一部分并且在 System.Web.MVC 命名空间内

    http://msdn.microsoft.com/en-us/library/system.web.mvc.idependencyresolver(v=vs.98).aspx

    Api 控制器在哪里使用 DependencyResolver 实例,它是 System.Web.Http 的一部分。

    http://msdn.microsoft.com/en-us/library/system.web.http.dependencies.idependencyresolver(v=vs.108).aspx

    【讨论】:

      【解决方案2】:

      MVC 和 WebAPI 控制器有不同的方式来设置它们的依赖解析器。这就是我为 Unity 设置依赖解析器的方式:

      public void ConfigureForMvc4()
      {
          DependencyResolver.SetResolver(
              new UnityMvc4.UnityDependencyResolver(Container));
      }
      
      public void ConfigureForWebApi()
      {
          GlobalConfiguration.Configuration.DependencyResolver =
              new UnityWebApi.UnityDependencyResolver(Container);
      }
      

      【讨论】:

      • 你没有。您说的是 DependencyResolver.SetResolver,它用于 MVC 控制器。 Web API 控制器使用GlobalConfiguration.Configuration.DependencyResolver
      • 哦,我试过用这个 GlobalConfiguration.Configuration.DependencyResolver = new UnityWebApi.UnityDependencyResolver(Container);但在我的情况下,我会写我的 SmDependencyResolve 派生形式 IDependcencyResolver of system.web.mvc 其中全局配置依赖解析器是形式 system.web.http IDependency resolver
      • 对于 MVC 的结构图和 WebApi 控制器的结构图是否有单独的 nuget
      • 我知道这个问题已经过时了,但是本着货币精神,我在 WebApi nuget.org/packages/StructureMap.WebApi2987654321@ 上遇到了这个问题
      【解决方案3】:

      需要为WebApi添加依赖注入文件

      安装 NuGet StructureMap.WebApi2 并在 App_Start/WebApiConfig.cs 文件中调用 StructuremapWebApi.Start();

      参考:https://www.exceptionnotfound.net/setting-up-dependency-injection-in-web-api-with-structuremap/

      【讨论】:

        猜你喜欢
        • 2019-02-17
        • 1970-01-01
        • 2021-02-02
        • 2016-10-03
        • 1970-01-01
        • 2016-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多