Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ninject会调用dispose并关闭NHibernate会话吗?_Nhibernate_Asp.net Mvc 3_Dependency Injection_Ninject - Fatal编程技术网

Ninject会调用dispose并关闭NHibernate会话吗?

Ninject会调用dispose并关闭NHibernate会话吗?,nhibernate,asp.net-mvc-3,dependency-injection,ninject,Nhibernate,Asp.net Mvc 3,Dependency Injection,Ninject,我将ASP.NETMVC3与Ninject和NHibernate一起使用 在考虑DI时,我认为获得资源的人也会确保关闭它(在这种情况下,Ninject应该负责) 但我不确定在使用InRequestScope时Ninject是如何工作的 我的代码是: Bind<ISession>().ToMethod(context => context.Kernel.Get<ISessionFactory>().OpenSession()).InRequestScope(); B

我将ASP.NETMVC3与Ninject和NHibernate一起使用

在考虑DI时,我认为获得资源的人也会确保关闭它(在这种情况下,Ninject应该负责)

但我不确定在使用InRequestScope时Ninject是如何工作的

我的代码是:

Bind<ISession>().ToMethod(context => context.Kernel.Get<ISessionFactory>().OpenSession()).InRequestScope();
Bind().ToMethod(context=>context.Kernel.Get().OpenSession()).InRequestScope();

我打开一个会话并将其放在I InRequestScope中,但当会话超出请求范围时,我是否需要关闭会话?

如果我正确理解代码,答案是肯定的。Ninject使用的激活策略之一是DisposableStrategy,其Deactivate方法对实现IDisposable的任何对象调用Dispose。如果您使用的是Ninject.Web.MVC扩展,OnePerRequestModule将自动清除绑定缓存。这将对所有激活策略(包括DisposableStrategy)调用Deactivate方法

由于ISession实现IDisposable,因此将对其进行处置。ISession的默认实现SessionImpl在Dispose上关闭会话


如果不使用Ninject.Web.MVC扩展,缓存最终将被清除,但是在EndRebug中可能不会发生。

你能解释一下这是怎么不同的吗?和/或考虑关闭这一点——有很多关于这个问题的答案,这就是为什么他们没有一个正确答案IMO。你提到的问题有两个答案是矛盾的,实际上我在这里得到了一个很好的答案,但是现在它被删除了?也许是你干的?@Lutica:问题是至少还有两个半问题+答案@达林删除了他的答案,因为一名维护者(@Remo Gloor)指出了他的答案中的不足@Darin可能应该把它放在一边,编辑成一篇收回的文章,因为他误解了一些东西,这对你们任何人来说都是一次学习的经历。如果我能够删除帖子,我当然不会——我会对答案发表评论,让它得到修复,或者发布一个改进的版本,如果没有得到任何修改的话results@Lutica:我在这里坚持己见的原因是,在MVC3中正确使用Ninject和NHibernate的问题上,没有一个像样的答案、问题或博客帖子可以供人们参考,而每一个答案不完整的新问题只会让问题变得更糟,而不是更好。如果有人能找出最好的问题,我会悬赏……顺便说一句,S#ARP架构经常被建议作为寻找这一领域最佳实践的地方,但从其他答案中你就知道了!