【发布时间】:2012-08-29 19:18:05
【问题描述】:
我正在使用 StructureMap 并且我已经为 ISession 配置了 HybridHttpOrLocalThreadStorage 生命周期。根据每个请求创建新会话并将其注入控制器。
现在,我的问题是关于处置。我已经阅读了许多介绍不同方法的文章。有些人在控制器中执行此操作,有些在存储库中,有些在 http 模块中,其他人在 Application_EndRequest() 处理程序中执行此操作。批评的范围从违反 SRP 到“创建对象的人应该负责其处置”等等。
所以底线是:
- 常见的方法是手动处理这些会话 - 为什么?我已经配置了我的容器来管理特定对象的生命周期。它不应该(即 IoC)为我管理吗?
- 没有可供处置的选项是用
Application_EndRequest()处理它的“最佳”方式吗?
例如,this article 详细解释了一种可用的方法,但文章本身已超过 2.5 年。也许新版本的 StructureMap 会使大部分实现过时?
【问题讨论】:
-
StructureMap 应该在 HTTP 请求结束时处理会话,这是该生命周期的目的。这相当于在 Application_EndRequest 中处理会话。
-
@eulerfx :你确定是这样吗?所以,我所要做的就是将 Session 传递给我的控制器,对数据做任何我必须做的事情,调用
SaveChanges并退出,对吗? StructureMap 会做剩下的事情吗?在阅读了其他人在控制器、存储库、模块等中手动处理会话后,我不太确定。有没有办法验证这一点? -
@Steven - 非常好的文章。谢谢。我在那里投票赞成你的答案!
-
我没有使用过 StructureMap,所以我不能确定,但这是 IoC 容器的工作 - 处理组件,所以我猜应该这样做。
标签: nhibernate structuremap ravendb isession