Autofac解析每个会话

时间:2014-09-08 18:53:55

标签: c# asp.net session inversion-of-control autofac

我正在尝试在Autofac中注册一个对象,这对每个用户都是不同的。我想过使用当前的会话,但我找不到实现这个目标的方法。我正在使用webforms,因此我无法使用this。 我尝试为我的会话创建一个Lifetimescope,但随着我使用的多租户,我无法让它工作。此外,永远不会抛出session_end。所以这不是一个选择。

我尝试了几乎所有的东西,但它不是想要的行为(我希望对象存在于用户会话中,因此当我更新对象时我希望它也保存在那里)或者它不起作用:

  • 在Autofac中注册HttpSessionStateWrapper并使用InstancePerOwned使我的对象依赖于它
  • 创建自定义ContainerProvider,添加SessionLifeTime ILifetimeScope。在Session_Start中创建一个lifetimescope并解决它
  • 使用Get<创建一个SessionWrapper T>方法将为我从会话中返回对象并在我的容器中注册该对象。

有没有办法为每个用户的会话解析同一个对象?

希望有人可以帮忙!

1 个答案:

答案 0 :(得分:1)

所以你想缓存数据?但这并不意味着您必须在会话中缓存组件。您可以将该组件设置为瞬态或单例,并在需要时让它从会话中检索价格数据。这简化了DI注册,可能是您的代码,并且更容易验证您的DI配置。