我正在寻找一些关于正确机制的建议,用于以真正的 session-pr-request 行为将 RavenDB IDocumentSession 放入我的存储库。
这是一个全新的 MVC3 应用程序,我使用 NuGet 获得了 Ninject / Ninject.MVC3。RavenDB 在外部服务器上运行(即非嵌入式)。
我已经设置了 Ninject 模块来返回正确的存储库,以及每个请求的会话。
但是 - MVC3 是否会为每个操作方法实例化控制器?在这种情况下,我可以只允许 MVC3/Ninject 注入我的存储库和他们需要的会话,没问题。
但是,如果一个控制器在多个请求中重复使用,这可能不起作用,因为之前请求的存储库现在可能会使用一个旧的并被丢弃的会话。
我已经研究了几种方法来做到这一点 - 以上是基本的方法。我也尝试过在每个请求开始时从 IoC 容器获取新会话的 ActionFilterAttribute 之类的操作 - 但在这种情况下,我应该把它放在哪里?
我的存储库是否应该有一个它使用的 Session 属性,它每次实际上都从容器中获取当前会话?这会增加存储库实现和 IoC 容器之间的耦合,但我猜应该可以。
这样做的正确方法是什么?酷孩子们是怎么做到的?任何帮助将不胜感激!