nuget - 无法在 Nuget 中将 Ninject 升级到最新版本

标签 nuget ninject ninject.web

我有一个使用一些 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 ,我得到:

Unable to resolve dependencies. 'Ninject 3.3.4' is not compatible with 'Ninject.Web 3.2.1 constraint: Ninject (>= 3.2.0 && < 3.3.0)'



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

我应该更改 Ninject.Web 的依赖行为吗?或者这会不安全吗?如果我这样做,我应该将依赖行为更改为什么?

谢谢

最佳答案

好的,这是解决方法:

  • 删除 Ninject.Web完全打包。不再需要此软件包,因为它现在已集成到 Ninject.Web.Common (好吧,无论如何,版本 v3.3+)
  • 更新软件包 Ninject , Ninject.Web.CommonNinject.Web.Common.WebHost .这些现在应该升级好了。对我来说,它们都是 v3.3.1。
  • 作为软件包升级的一部分,新文件 App_Start\Ninject.Web.Common.cs将被添加。这只是对现有 App_Start\NinjectWeb.Common.cs 的重命名。所以要么 [a] 删除新文件,要么 [b] 迁移您的 Ninject 模块注册并删除旧文件。
  • 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 .
  • 您也可以删除文件 App_Start\NinjectWeb.cs出于同样的原因(注册 NinjectHttpModule )
  • 如果 OnePerRequestHttpModuleApp_Start\Ninject.Web.Common.cs 中无法解决然后将以下 using 语句添加到文件 using Ninject.Web.Common.WebHost; (我认为这是包的 v3.3.1 中缺少的引用。

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

    关于nuget - 无法在 Nuget 中将 Ninject 升级到最新版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52272485/

    相关文章:

    asp.net-mvc - 使用 Ninject 进行 SignalR 2 依赖注入(inject)

    c# - Unity 等价于 Ninject 的 Bind.ToMethod of IPrincipal,IIdentity

    asp.net-mvc - Ninject.Web.Common 抛出 ActivationException 试图将依赖项注入(inject) HttpApplicationInitializationHttpModule

    .net - NuGet 包管理器未显示已安装的包

    c# - 在容器 dotnet 核心容器中运行时无法加载文件或程序集 'Newtonsoft.Json,版本 = 12.0.0.0

    asp.net - NuGet 包还原不会为 asp.net 网站安装包

    asp.net-mvc-3 - ASP.NET MVC 3 和全局过滤器注入(inject)

    asp.net-web-api - Asp.net Web Api NuGet 包

    c# - 如何使用 Ninject 注入(inject)静态属性?

    c# - 在内核中绑定(bind)时的 ToConstant