6

我有一个使用一些 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还是不安全?如果我这样做,我应该将依赖行为更改为什么?

谢谢

4

1 回答 1

8

好的,这是解决方法:

  1. 完全取出Ninject.Web包装。不再需要此软件包,因为它现在已集成到Ninject.Web.Common(好吧,无论如何都是 v3.3+ 版本)
  2. 更新包Ninject和. 这些现在应该升级好了。对我来说,它们都是 v3.3.1。Ninject.Web.CommonNinject.Web.Common.WebHost
  3. 作为软件包升级的一部分,App_Start\Ninject.Web.Common.cs将添加一个新文件。这只是对现有文件的重命名, App_Start\NinjectWeb.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_Start\Ninject.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_Start\NinjectWeb.cs出于同样的原因删除文件(注册NinjectHttpModule

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

希望这对其他人有帮助。

于 2018-09-11T14:22:04.680 回答