Ninject Request Scope和衍生线程

时间:2011-06-08 03:05:37

标签: asp.net-mvc multithreading nhibernate ninject

我的MVC应用程序配置了Ninject和NHibernate。我有一些请求进来,他们所做的就是排队一些工作,启动一个线程来处理队列,然后返回。

我将NHibernate会话设置为ReqeustScope。现在我的问题是,一旦请求结束,Ninject是否会杀死我的Session对象?或者它会为产生的线程保留它吗?

2 个答案:

答案 0 :(得分:2)

我对NInject不是很熟悉,但如果它像其他DI容器一样工作,我希望你的会话在请求终止后不可用。如果您需要在同一个应用程序域中运行后台进程,您可以考虑提供两个用于解析ISession的路径,一个使用ThreadScope供您的后台线程访问,另一个使用RequestScope用于应用程序的Web部分。如果您需要将使用Web会话检索的实体传递到后台线程,请务必小心。

如果您可以将后台进程拆分到另一个应用程序域,您还可以创建一个自定义作用域来检查HttpContext,然后决定使用哪个作用域。

答案 1 :(得分:2)

答案是肯定的,Ninject将在HttpContext被垃圾收集后的某个时刻尝试停用会话对象。请参阅此博客文章:

http://kohari.org/2009/03/06/cache-and-collect-lifecycle-management-in-ninject-20/