Asp.net mvc NHibernate,依赖注入。正确关闭ISE

Asp.net mvc NHibernate,依赖注入。正确关闭ISE,asp.net-mvc,nhibernate,ninject,Asp.net Mvc,Nhibernate,Ninject,我正在使用Ninject、NHibernate、ASP.NETMVC3和存储库模式。Ninject中的模块绑定如下所示 Bind<ISessionFactory>().ToProvider(new SessionFactoryProvider()).InSingletonScope(); Bind<ISession>().ToMethod(context => context.Kernel.Get<ISessionFactory>().OpenSessi

我正在使用Ninject、NHibernate、ASP.NETMVC3和存储库模式。Ninject中的模块绑定如下所示

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

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

我通常在请求开始时打开一个新会话和事务,然后在请求结束时提交/关闭它


看看这个。这篇文章超出了你的需要,我想它会对你有很大帮助。请仔细看看他编写的定制HttpModule。这只是一个例子,您可以在Google上搜索并找到许多类似的实现。

因此您的会话是根据请求配置的。这意味着,它在请求开始时被打开,在请求结束时被容器关闭。这可能是个好主意。若您试图手动重新打开(或关闭)会话,我猜它将抛出异常。只需将ISession注入到存储库中。

环顾四周—认为这已经得到解决。但是我找不到,我得到的最好的结果是,我说这是一个原因,例如,让Dispose在容器与MVC集成决定的时间发生,可能会也可能不会为产生的异常生成一个好的错误路径——通常您会希望以托管方式显式刷新hi@Ruben,谢谢。正如您所说,何时调用Dispose取决于容器与MVC的集成。我更喜欢以一种有管理的方式明确地做。谢谢,你提供的链接有助于理解。我还想显式地打开/提交/关闭。您好,谢谢您的回答。但是正如Ruben所说,我认为何时调用Dispose取决于容器与MVC的集成。我不认为是Ninject干的。但是扩展名Ninject.Web.Mvc可以做到这一点。不管怎样,我现在更愿意明确地这样做。