2012-08-29 48 views
0

我正在使用StructureMap,并且我已配置了使用HybridHttpOrLocalThreadStorage生命周期的ISession。创建新会话并根据请求将其注入到控制器中。适当的会话(RavenDB/NHibernate)处置 - IoC和web应用程序

现在,我的问题是关于处置。我已阅读了不同方法数量的文章数量。有些人是在控制器上做的,一些在仓库中,一些在http模块中,其他人在Application_EndRequest()处理程序中做。从SRP违规到'创建一个对象应该负责处理'等等的批评不胜枚举。

因此,底线就是:

  • 常用的方法是手工处理这些会议 - 为什么?我已经配置了我的容器来管理特定对象的生命周期。它不应该(即IoC)为我管理它吗?
  • 可供选择的处理方式是处理它在Application_EndRequest()“最好”的方式去处理它?

例如,this article在长度上解释了一种可用方法,但该文章本身已超过2.5岁。也许StructureMap的新版本会使大部分实现过时?

+1

当HTTP请求结束时,StructureMap应该处理该会话,这是该生命周期的目的。这相当于在Application_EndRequest中处理会话。 – eulerfx

+1

相关:http://stackoverflow.com/questions/10585478/one-dbcontext-per-web-request-why – Steven

+0

@eulerfx:你确定是这种情况吗?所以,我必须做的就是将Session传递给我的控制器,做任何我必须对数据做/做的事情,调用'SaveChanges'并退出,对吧?其余的是结构图?在阅读其他人员在控制器,存储库,模块等中手动处理会话之后,我不太确定。有没有办法来验证? – user981375

回答

2

如果您使用的是RavenDB .net客户端,您将使用DocumentStore和DocumentSession。这两个对象都在后台做了大量的工作。本地缓存提到一件事。为了保持事情的清洁和高效,每个会话都应在工作完成时调用session.dispose()。应用程序结束时应调用documentStore.Dispose()。

+0

这很清楚。我没有配置'DocumentStore'(singleton)和'DocumentSession'(每个请求)的问题。我的问题是关于如何在工作完成后正确处置'DocumentSession'。 – user981375

相关问题