每个请求的RavenDB会话使用MVC3和Ninject使用存储库模型

Run*_*sen 6 ninject repository-pattern ravendb asp.net-mvc-3

我正在寻找一些关于正确机制的建议,用于在真正的session-pr-request行为中将RavenDB IDocumentSession放入我的存储库.

这是一个绿地MVC3应用程序,我使用NuGet得到了Ninject/Ninject.MVC3.RavenDB正在外部服务器上运行(即非嵌入式).

我已经设置了Ninject模块来返回正确的存储库,并且还为每个请求设置了一个会话.

但是 - MVC3是否会为每个动作方法实例化控制器?在这种情况下,我可以让MVC3/Ninject注入我的存储库和他们需要的会话,没问题.

但是,如果在多个请求之间重用一个控制器,这可能不起作用,因为从先前的请求中闲置的存储库现在可能会使用旧的并丢弃的会话.

我已经看了几种方法 - 上面是基本的.我还尝试过像ActionFilterAttribute这样的东西,它在每个请求开始时从IoC容器中获取一个新会话 - 但在这种情况下,我应该把它放在哪里?

我的存储库是否应该使用Session属性,每次实际从容器中获取当前会话?这将添加存储库实现和IoC容器之间的耦合,但我认为应该工作.

这样做的正确方法是什么?凉爽的孩子们如何做到这一点?任何帮助将非常感谢!

Aye*_*ien 12

除非您正在使用控制器工厂做一些非常有趣的事情,否则每个控制器实例将用于单个请求.控制器不是线程安全的,并且通常不会超出单个请求.

  • 感谢您的答复. (5认同)
  • 哦,当我在它的时候 - 感谢一个伟大的产品!我在看到NDC 2011上的一些演示文稿之后看了RavenDB,它肯定有可能让生活变得更轻松! (2认同)