正确的会话(RavenDB / NHibernate)处理 - IoC和Web应用程序

时间:2012-08-29 19:18:06

标签: nhibernate structuremap ravendb isession

我正在使用StructureMap,我已经使用HybridHttpOrLocalThreadStorage生命周期配置了ISession。创建新会话并根据请求将其注入控制器。

现在,我的问题是处理问题。我读过一些文章,介绍了不同方法的数量。有些人在控制器中执行此操作,一些在存储库中执行,一些在http模块中执行,另一些人在Application_EndRequest()处理程序中执行此操作。批评的范围从SRP违规到“创造对象的人应该负责处理”等等。

所以底线是:

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

例如,this article详细解释了一种可用的方法,但该文章本身已超过2.5年。也许新版本的StructureMap使大多数实现过时了?

1 个答案:

答案 0 :(得分:2)

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