NHibernate,依赖注入。正确关闭ISession

时间:2011-03-07 15:39:43

标签: asp.net-mvc nhibernate ninject

我正在使用Ninject,NHibernate,ASP.NET MVC3和存储库模式。 Ninject中的模块绑定如下。

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

问题是存储库应该采用ISession还是ISessionFactory。如果它需要一个ISessionFactory然后在存储库中我可以在必要时打开一个会话并在使用后关闭它。如果需要ISession,则存储库直接使用它。但我想知道会议是否正确关闭。

2 个答案:

答案 0 :(得分:2)

所以你的会话是按照请求配置的。这意味着,它在请求开始时打开,最后由容器关闭。这可能是一个好主意。如果您尝试手动重新打开(或关闭)会话,我想它会抛出异常。只需将ISession注入存储库。

答案 1 :(得分:1)

我通常在请求开始时打开一个新的会话和事务,并在最后提交/关闭它。

看看这个post on nhibernate.info。这篇文章超出了你的需求,我认为它会对你有很大的帮助。更好地了解他写的自定义HttpModule。这只是一个例子,您可以在Google上搜索并找到许多类似的实现。