用Unity解析方法

时间:2010-09-10 14:37:11

标签: asp.net-mvc nhibernate caching domain-driven-design unity-container

我正在使用asp.net mvc 2开发一个Web应用程序,我正在使用NHibernate(每个请求的会话)和Unity(用于依赖注入)。

在我的Global.asax中,我正在管理我的ISession:

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中的静态)e通过SessionFacotry.GetCurrentSession()获取ISession。我的存储库我注入了控制器的控制器!大...

但是,在我的asp.net mvc应用程序中,我在缓存中有一个值,而在此Cache中有一个CacheRemovedItem委托。在这个方法中(在委托中),我需要在我的reopsitories中保留一些信息,但是当缓存过期时我没有请求。我想知道我怎么能以正确的方式解析我在这个方法中的依赖关系(CacheItemRemoved委托)?或如何设置ISession以通过SessionFactory 中的GetCurrentSession()获取?

PS:对不起我的英文!

1 个答案:

答案 0 :(得分:0)

似乎你需要的是使用SessionFactory.GetCurrentSession()

为此:

1-在current_session_context_class属性的配置文件中将其配置为web:

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

2-使用CurrentSessionContext.Bind(session);在您的BeginRequest和CurrentSessionContext.Unbind(sessionFactory);在你的EndRequest中

希望它有所帮助。