2014-09-08 4 views
0

Я пытаюсь зарегистрировать объект в Autofac, который отличается для каждого пользователя. Я думал об использовании текущей сессии, но я не могу найти способ это сделать. Я использую webforms, поэтому я не могу использовать this. Я пытаюсь создать Lifetimescope для своей сессии, но вместе с используемой мною мутенцией я не могу заставить ее работать. Кроме того, session_end никогда не выбрасывается. Так что это не вариант.Решение Autofac за сеанс

Я попробовал почти все, но это либо не нужное поведение (я хочу, что объект живет в сессии пользователей, поэтому, когда я обновляю объект Я хочу, чтобы спастись там тоже), или он не работает:

  • Регистрация HttpSessionStateWrapper в Autofac и сделать мой объект зависит от него с помощью InstancePerOwned
  • Создание пользовательского ContainerProvider, добавьте SessionLifeTime ILifetimeScope. Создайте lifetimecope в Session_Start и разрешите его
  • Создайте SessionWrapper с методом Get < T>, который вернет объект из сеанса для меня и зарегистрирует этот объект в моем контейнере.

Есть ли способ разрешить один и тот же объект для сеанса каждого пользователя?

Надеюсь, кто-то может помочь!

+0

Что именно вы пытаетесь кэшировать за сеанс? – Steven

+0

Я разрабатываю механизм для sweepstake, поэтому я хочу кэшировать участника и введенный код и цену, которую он выиграл. – ydd1987

+0

Возможный дубликат [Управление областями жизненного цикла AutoFac за сеанс и запрос в asp.net mvc 3] (http://stackoverflow.com/questions/11721919/managing-autofac-lifetime-scopes-per-session-and-request-in -asp-net-mvc-3) (несмотря на использование веб-форм, механизм будет таким же) –

ответ

1

Итак, вы хотите кэшировать данные? Но это не значит, что вы должны кэшировать компонент в сеансе. Вы можете сделать этот компонент переходным или одноточечным и позволить ему получать данные о ценах из сеанса, когда это необходимо. Это упрощает регистрацию DI, возможно, ваш код, и упрощает проверку вашей конфигурации DI.

+0

Я согласен (в основном потому, что я не мог заставить его работать). Я использую PostSharp's LocationInterceptionAspect для кэширования или извлечения из кеша при обращении к свойству. – ydd1987