我正在使用StructureMap,并且我已配置了使用HybridHttpOrLocalThreadStorage
生命周期的ISession。创建新会话并根据请求将其注入到控制器中。适当的会话(RavenDB/NHibernate)处置 - IoC和web应用程序
现在,我的问题是关于处置。我已阅读了不同方法数量的文章数量。有些人是在控制器上做的,一些在仓库中,一些在http模块中,其他人在Application_EndRequest()
处理程序中做。从SRP违规到'创建一个对象应该负责处理'等等的批评不胜枚举。
因此,底线就是:
- 常用的方法是手工处理这些会议 - 为什么?我已经配置了我的容器来管理特定对象的生命周期。它不应该(即IoC)为我管理它吗?
- 可供选择的处理方式是处理它在
Application_EndRequest()
“最好”的方式去处理它?
例如,this article在长度上解释了一种可用方法,但该文章本身已超过2.5岁。也许StructureMap的新版本会使大部分实现过时?
当HTTP请求结束时,StructureMap应该处理该会话,这是该生命周期的目的。这相当于在Application_EndRequest中处理会话。 – eulerfx
相关:http://stackoverflow.com/questions/10585478/one-dbcontext-per-web-request-why – Steven
@eulerfx:你确定是这种情况吗?所以,我必须做的就是将Session传递给我的控制器,做任何我必须对数据做/做的事情,调用'SaveChanges'并退出,对吧?其余的是结构图?在阅读其他人员在控制器,存储库,模块等中手动处理会话之后,我不太确定。有没有办法来验证? – user981375