我正在使用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,则存储库直接使用它。但我想知道会议是否正确关闭。
答案 0 :(得分:2)
所以你的会话是按照请求配置的。这意味着,它在请求开始时打开,最后由容器关闭。这可能是一个好主意。如果您尝试手动重新打开(或关闭)会话,我想它会抛出异常。只需将ISession注入存储库。
答案 1 :(得分:1)
我通常在请求开始时打开一个新的会话和事务,并在最后提交/关闭它。
看看这个post on nhibernate.info。这篇文章超出了你的需求,我认为它会对你有很大的帮助。更好地了解他写的自定义HttpModule。这只是一个例子,您可以在Google上搜索并找到许多类似的实现。