我正在使用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:对不起我的英文!
答案 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中
希望它有所帮助。