我真的很困惑小的,部分的,一个文件的例子,到处都有一个 Ninject 内核,而没有展示如何在应用程序中真正到达那个内核。
(1)我们是否应该实例化一个内核并将其保持在“静态”上下文中?或者我们应该在每个请求上实例化一个不同的(*在 Application_BeginRequest* 中)
(2)如果是“每个请求的内核”,那么为什么在 Application_Start 上调用 NinjectWebCommon.cs 的 Initialize() 方法(安装 NuGet 包时获取),因为它调用 bootstrapper.Initialize(CreateKernel) - NinjectWebCommon.cs
(3)如果是“一个全局静态内核”,则“InRequestScope()”不起作用。它执行以下代码并返回 null,因为在 ApplicationStart() 时间没有请求。
kernel.Components.GetAll<INinjectHttpApplicationPlugin>()
.Select(c => c.RequestScope)
.FirstOrDefault(s => s != null);
(4)同样,如果是“每个请求的内核”,我们将把内核保存在哪里?HttpContext.Current?那么如果我要使用 HttpContext.Current ,那么使用 InRequestScope() 的意义是什么?