Asp.net mvc 3 MVC3项目中的Ninject和ChildKernel;加载Ninject组件ICache时出错“;

Asp.net mvc 3 MVC3项目中的Ninject和ChildKernel;加载Ninject组件ICache时出错“;,asp.net-mvc-3,ninject,ninject-extensions,Asp.net Mvc 3,Ninject,Ninject Extensions,我正在ASP.NETMVC3项目中使用Ninject(3.0)。在请求处理的某个时刻,我想执行一些任务 我正在使用每个请求会话模式,但不希望这些任务与当前请求共享同一会话。所以,我想ChildKernels可以帮我解决这个问题。我打算在子内核中为ISession创建另一个绑定,但首先是: var child = new Ninject.Extensions.ChildKernel.ChildKernel(NinjectMVC3.Kernel); child.Dispose(); 如果在请求过程

我正在ASP.NETMVC3项目中使用Ninject(3.0)。在请求处理的某个时刻,我想执行一些任务

我正在使用每个请求会话模式,但不希望这些任务与当前请求共享同一会话。所以,我想ChildKernels可以帮我解决这个问题。我打算在子内核中为ISession创建另一个绑定,但首先是:

var child = new Ninject.Extensions.ChildKernel.ChildKernel(NinjectMVC3.Kernel);
child.Dispose();
如果在请求过程中执行类似的代码,则在请求结束时(而不是在
.Dispose()
调用)会出现加载Ninject组件ICache时出错的
异常。如果我删除
child.Dispose()
一切正常


那么,我是否选择了使用ChildKernel的正确方式?使用子内核而不显式地处理它们安全吗?如果我处理子内核,为什么Ninject会在请求端抛出呢?

抛出异常是因为您将所有模块从扩展加载到子内核中。创建LoadExtensions=false的内核可以解决这个问题。但在你的情况下,这不是解决办法


ChildKernel的意图并不是真正用于不同的作用域。您需要为该子内核上的任务注册所有内容。光是一个疗程是不够的。只为会话添加条件绑定是更好的选择。

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


ChildKernel的意图并不是真正用于不同的作用域。您需要为该子内核上的任务注册所有内容。光是一个疗程是不够的。为会话添加一个条件绑定是更好的选择。

谢谢,我刚刚习惯了Unity中的ChildContainer,所以我考虑以同样的方式使用ChildKernel:)现在ChildContainer对我来说更透明了,我会尝试使用条件绑定:)谢谢,我刚刚习惯了Unity中的ChildContainer,所以我考虑以同样的方式使用ChildKernel:)现在ChildContainer对我来说更透明一些,我将尝试使用条件绑定:)