我有一个使用某些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.Web
已经是最新版本!我应该更改
Ninject.Web
的依赖行为还是不安全?如果这样做,我应该将“依赖关系”行为更改为什么?谢谢
最佳答案
好的,这是解决方法:
Ninject.Web
软件包。不再需要此软件包,因为它现在已集成到Ninject.Web.Common
(无论如何,版本v3.3 +)Ninject
,Ninject.Web.Common
和Ninject.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
)OnePerRequestHttpModule
无法在App_Start\Ninject.Web.Common.cs
中解析,则将以下using语句添加到文件using Ninject.Web.Common.WebHost;
中(我认为这是该软件包v3.3.1中缺少的引用。希望这对其他人有帮助。
关于nuget - 无法在Nuget中将Ninject升级到最新版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52272485/