无法将 Ninject 升级到 Nuget 中的最新版本



我有一个使用一些Ninject软件包的 ASP.NET WebForms应用程序,但我被困在某个版本上。 当我尝试升级到最新版本时,出现"无法解决依赖项"问题。

有问题的软件包是:

Package                       InstalledVer   LatestVer
------------------------------------------------------
Ninject                       v3.2.2         v3.3.4
Ninject.Web                   v3.2.1 ✔      v3.2.1
Ninject.Web.Common            v3.2.3         v3.3.1
Ninject.Web.Common.WebHost    v3.2.3         v3.3.1

如果我尝试更新Ninject,我会得到:

无法解析依赖项。"Ninject 3.3.4"与 'Ninject.Web 3.2.1 约束:Ninject (>= 3.2.0 && <3.3.0(">

但是Ninject.Web已经是最新版本了!

我应该更改Ninject.Web的依赖项行为还是不安全? 如果我这样做,我应该将依赖项行为更改为什么?

谢谢

好的,这就是解决方法:

  1. 完全卸下Ninject.Web包。 不再需要此包,因为它现在已集成到Ninject.Web.Common中(无论如何,v3.3+ 版本(
  2. 更新软件包NinjectNinject.Web.CommonNinject.Web.Common.WebHost。 这些现在应该可以升级。对我来说,它们都是v3.3.1。
  3. 作为软件包升级的一部分,将添加一个新文件App_StartNinject.Web.Common.cs。 这只是现有App_StartNinjectWeb.Common.cs的重命名,因此 [a] 删除新文件或 [b] 迁移 Ninject 模块注册并删除旧文件。
  4. web.config中,您现在应该删除OnePerRequestModule模块:

    <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
    <add name="OnePerRequestModule" type="Ninject.Web.Common.OnePerRequestHttpModule" />
    </modules>
    </system.webServer>
    

    这是因为此模块是在加载时动态注册的App_StartNinject.Web.Common.cs文件的Start()方法:

    public static void Start()
    {
    DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
    DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
    bootstrapper.Initialize(CreateKernel);
    }
    

    如果不从 web.config 中删除此条目,则在启动应用程序时可能会出现类型异常,尤其是因为作为版本更新的一部分,类已从Ninject.Web.Common命名空间移动到Ninject.Web.Common.WebHost

  5. 您也可以出于同样的原因删除文件App_StartNinjectWeb.cs(注册NinjectHttpModule(

  6. 如果OnePerRequestHttpModuleApp_StartNinject.Web.Common.cs中没有解决,则将以下 using 语句添加到文件using Ninject.Web.Common.WebHost;(我认为这是软件包 v3.3.1 中缺少的引用。

希望这对其他人有所帮助。

相关内容

  • 没有找到相关文章

最新更新