【问题标题】:Could not load type 'Ninject.Web.WebApi.IWebApiRequestScopeProvider' from assembly 'Ninject.Web.WebApi'无法从程序集“Ninject.Web.WebApi”加载类型“Ninject.Web.WebApi.IWebApiRequestScopeProvider”
【发布时间】:2020-11-26 14:53:44
【问题描述】:

我最近将我的解决方案升级到 .net Framework 4.8 并更新了大量 nuget 包,但现在我在启动我的 API 项目时遇到了问题。

我觉得这种绑定重定向很糟糕,但我看过这个,它们如下......

  <dependentAssembly>
    <assemblyIdentity name="Ninject" publicKeyToken="c7192dc5380945e7" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.3.4.0" newVersion="3.3.4.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Ninject.Web.Common" publicKeyToken="c7192dc5380945e7" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.3.2.0" newVersion="3.3.2.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Ninject.Web.Common.OwinHost" publicKeyToken="c7192dc5380945e7" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.3.1.0" newVersion="3.3.1.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Ninject.Web.WebApi" publicKeyToken="c7192dc5380945e7" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.3.1.0" newVersion="3.3.1.0" />
  </dependentAssembly>

这里是 packages.config...

  <package id="Ninject" version="3.3.4" targetFramework="net48" />
  <package id="Ninject.Extensions.NamedScope" version="3.3.0" targetFramework="net48" />
  <package id="Ninject.Web.Common" version="3.3.2" targetFramework="net48" />
  <package id="Ninject.Web.Common.OwinHost" version="3.3.1" targetFramework="net48" />
  <package id="Ninject.Web.Common.WebHost" version="3.3.2" targetFramework="net48" />
  <package id="Ninject.Web.WebApi" version="3.3.1" targetFramework="net48" />
  <package id="Ninject.Web.WebApi.OwinHost" version="3.3.0" targetFramework="net48" />

这里没有针对 Ninject.Web.WebApi.OwinHost 的特定重定向,所以我认为这可能是问题所在,或者可能是其他库之一,但他们之前从未有过重定向,我已经尝试过......

Get-Package MyApp.Api | Add-Bindings

(请原谅这里的语法 - 可能是记忆中的错误)

...添加缺少的相关绑定。

【问题讨论】:

    标签: asp.net-web-api ninject ninject.web.mvc


    【解决方案1】:

    这是由 Nuget 包的版本控制问题引起的(这就是我不再选择使用 Ninject 的原因......)

    我将WebApi包降级如下...

    <package id="Ninject.Web.WebApi" version="3.3.0" targetFramework="net48" />
    

    这样它就符合Ninject.Web.WebApi.OwinHost,清理、重建并再次尝试,一切都完美无缺。

    我怀疑Ninject.Web.WebApi.OwinHost 包尚未更新且不兼容。

    【讨论】:

    • 这实际上也为我解决了这个问题,所以谢谢。对于将来阅读本文的其他人,请务必检查您的绑定重定向;如果您要重定向到 3.3.1,那么降级软件包将不起作用。
    • 你用什么代替 Ninject?我喜欢 Ninject,但它似乎不像以前那么活跃了,所以我一直在寻找替代品。
    • @HiredMind - [意见警告] 我发现内置的 DI 在 .net 核心项目中绰绰有余,而 AutoFac 是我的首选 - 既不使用“魔术”概念来做任何事情这样您就可以更好地了解绑定是如何工作的(每个都有自己的!)。
    【解决方案2】:

    包裹

    <package id="Ninject.Web.WebApi.OwinHost" version="3.3.0" targetFramework="net48" />
    

    被替换为

    <package id="Ninject.Web.WebApi.OwinSelfHost" version="3.3.1" targetFramework="net48" />
    

    https://github.com/ninject/Ninject.Web.WebApi/issues/32#issuecomment-661886853

    就我而言,我还需要将 Microsoft.AspNet.WebApi.Owin 更新到版本 5.2.7。

    【讨论】:

      猜你喜欢
      • 2016-01-02
      • 1970-01-01
      • 2012-05-05
      • 2010-09-19
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多