ASP.NET会话状态/ NInject / OnePerRequest行为的问题

时间:2010-09-17 11:58:08

标签: asp.net redirect session-state ninject lifecycle

2 个答案:

答案 0 :(得分:2)

我认为你走在正确的轨道上。以下是我的一些想法:

  • 除了你所拥有的强类型包装器之外,我还建议使用Facade来访问返回包装器的上下文对象,类似于IContextProvider。通过这种方式,您可以将它简单地引入,然后当它完全集成时,您可以重构提供者而不会破坏使用它的东西。我不知道,但你可能已经这样做了。如果你选择的话,改变你的持久性机制也会更容易。如果你能做到这一点,我建议你一旦从上下文对象中分离出所有的依赖关系,就把它改成不作为XML持久存在。 SessionState将更快地存储二进制对象,如果需要进行转换,您始终可以序列化为XML。

  • 我不认为Ninject是你正在尝试做的正确机制。由于垃圾收集不能依赖,因此很难在Ninject中发出请求结束的信号。你考虑过使用IHttpModule吗?您可以使用AcquireRequestState和ReleaseRequestState或EndRequest来处理在Session中获取/设置上下文。只允许应用程序通过外观访问上下文对象。

  • 如果你在网络农场,你可能还是在为你的会话存储使用数据库,所以把你的上下文放到数据库中会有很大不同。

答案 1 :(得分:0)

首先,尽管证明你已投入工作是好事,但如果不清楚你对决议感兴趣多少,我和其他人可能没有回复...... ... 一大块文字!这里有一个+1,用于投资奖金以获得完整的回复,该回复讨论Ninject ASP.NET扩展以及它们如何应用于您问题的每个元素。话虽如此,希望有人会为你提供真正的解决方案。

即使它是[非常] 2.0特定的,Nate's Cache and Collect Post也需要阅读。虽然看起来你对所涉及的权衡非常不满意并且深入调试,但这篇文章非常值得一读。

我还考虑转向Ninject的V2 - 很多这些东西都经过了大幅修改。它并没有神奇地起作用,而是代表了一个基于V1的大量学习的成熟重写。你读过Ninject的(V1或)V2单元测试吗?他们会向您展示您可以使用的低级工具,以实现您的目标。

对我来说,最重要的是你需要为独立于DI的状态管理制定策略,然后务必使用容器/ DI系统作为实施的一部分。