我想,这对于每个人来说都是一个常见的问题,他们在ASP.NET应用程序中遇到了NHibernate,但即使经过两个小时的谷歌搜索,我仍然无法弄清楚,如何正确管理ISession的生命周期。 我得到它应该是每个请求一个ISession实例,但问题是我的ISessionFactory被深深地注入到基础架构层中的存储库中的调用堆栈中,该层由域类调用,并且仅在控制器之后调用。我希望我的域名服务保持单身,以防止他们重新发送每个请求,但我不能将依赖于请求的服务注入到单例服务中。另一方面,我无法在存储库中手动打开和关闭会话,因为我以这种方式失去了“懒惰”。 那么,问题是,如何在IOC-container中注册ISession,为每个请求获取新的请求,但是从单例存储库中使用它?
答案 0 :(得分:0)
您可以在启动请求时创建会话,并绑定到请求上下文(在您的情况下将是请求 - 确保配置当前会话上下文),
session = sessionFactory.OpenSession();
NHibernate.Context.CurrentSessionContext.Bind(session);
然后在存储库中,您可以使用sesssionFactory来获取当前会话
session = this.sessionFactory.GetCurrentSession();