MVC3项目中的Ninject和ChildKernel:"Error loading Ninject component ICache"



我在 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 会在请求端抛出?

引发异常是因为您将扩展中的所有模块加载到子内核中。使用 LoadExtensions=false 创建内核可以解决这个问题。但这不是您情况下的解决方案。

ChildKernel的意图并不是为了不同的范围。您需要为该子内核上的任务注册所有内容。只是会话是不够的。仅为会话添加条件绑定是更好的选择。

最新更新