我在ASP.Net MVC3项目中使用Ninject(3.0)。在请求处理的某个时刻,我想执行一些任务。
我正在使用每个请求的会话模式,但不希望这些任务与当前请求共享同一个会话。所以,我想,ChildKernels可以帮助我解决这个问题。我打算在子内核中为ISession创建另一个绑定,但是从那开始:
var child = new Ninject.Extensions.ChildKernel.ChildKernel(NinjectMVC3.Kernel);
child.Dispose();
如果我在请求期间执行这样的代码,我会在请求结束时获得Error loading Ninject component ICache
例外 (而不是.Dispose()
来电)。如果我删除child.Dispose()
一切都很好。
那么,我选择使用ChildKernel的正确方法吗?在没有明确处理子内核的情况下使用子内核是否安全?如果我处理子内核,为什么Ninject会抛出请求结束?
答案 0 :(得分:3)
抛出异常是因为您将扩展中的所有模块加载到子内核中。使用LoadExtensions = false创建内核将解决该问题。但这不是你的解决方案。
ChildKernel的目的并不是针对不同的范围。您需要为该子内核上的任务注册所有内容。只是会议是不够的。仅为会话添加条件绑定是更好的选择。