Разрешить метод с помощью Unity - PullRequest
2 голосов
/ 10 сентября 2010

Я занимаюсь разработкой веб-приложения с asp.net mvc 2 и использую NHibernate (сеанс для каждого запроса) и Unity (для внедрения зависимостей).

В моем Global.asax яуправление моей сессией примерно так:

public override void Init()
{
    base.Init();

    BeginRequest += OpenNHibernateSession;
    EndRequest += DisposeNHibernateSession;
}

private static void OpenNHibernateSession(object sender, EventArgs e)
{            
    ManagedWebSessionContext.Bind(HttpContext.Current, _sessionFactory.OpenSession());
}

private static void DisposeNHibernateSession(object sender, EventArgs e)
{
    var session = ManagedWebSessionContext.Unbind(HttpContext.Current, _sessionFactory);

    if (session != null)
        session.Dispose();
}

Хорошо, и в моих репозиториях (в конструкторе) я передаю SessionFacotry (статический в global.asax) и получаю ISession с помощью SessionFacotry.GetCurrentSession ().Мои репозитории я добавляю в контроллеры контроллера!Отлично ...

Но в моем приложении asp.net mvc у меня есть значение в кеше и делегат CacheRemovedItem с этим кешем.В этом методе (в делегате) мне нужно сохранить некоторую информацию в моих репозиториях, но у меня нет запроса по истечении срока действия кэша.Я хотел бы знать как я могу РАЗРЕШИТЬ мои зависимости в этом методе (делегат CacheItemRemoved) правильным образом ?Или Как я могу настроить ISession для получения через GetCurrentSession () в SessionFactory ?

PS: Извините за мой английский!

1 Ответ

0 голосов
/ 23 декабря 2011

Кажется, что вам нужно использовать SessionFactory.GetCurrentSession ()

Для этого:

1- Настройте его в файле конфигурации свойства current_session_context_class для web:

<property name="current_session_context_class">web</property>

2- Использовать CurrentSessionContext.Bind (сеанс); в вашем BeginRequest и CurrentSessionContext.Unbind (sessionFactory); в вашем EndRequest

Надеюсь, это поможет.

...