Unity 解决方法
我正在使用 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 应用程序中,我在缓存中有一个值,并且有一个带有此缓存的 CacheRemovedItem 委托。在这个方法中(在委托中),我需要在我的存储库中保留一些信息,但是当缓存过期时我没有请求。我想知道如何以正确的方式解决此方法(CacheItemRemoved 委托)中的依赖项?或者如何设置 ISession 以通过 SessionFactory 中的 GetCurrentSession() 获取?
PS:对不起我的英语!
I'm developing an web application with asp.net mvc 2, and I'm using NHibernate (session per request) and Unity (for dependency injection).
In my Global.asax I'm managing my ISession something like this:
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();
}
Nice, and In my Repositories (in constructor) I pass the SessionFacotry (static in global.asax) e get ISession by SessionFacotry.GetCurrentSession(). My repositories I inject in the contrcutor's controllers! Great...
But, in my asp.net mvc application I have a value in cache and a CacheRemovedItem delegate with this Cache. In this method (in delegate), I need to persist some informations in my reopsitories, but I don't have a request when the cache expires. I'd like to know how could I RESOLVE my dependencies in this method (CacheItemRemoved delegate) in right way ? Or How could I setup an ISession to get via GetCurrentSession() in SessionFactory ?
PS: Sorry for my English!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
似乎您需要的是使用 SessionFactory.GetCurrentSession()
为此:
1- 在 web 的 current_session_context_class 属性上的配置文件中配置它:
2- 使用 CurrentSessionContext.Bind(session);在你的 BeginRequest 和 CurrentSessionContext.Unbind(sessionFactory);在您的 EndRequest
希望有帮助。
Seems that what you need is to use SessionFactory.GetCurrentSession()
For that:
1- Configure it in the configuration file on the current_session_context_class property to web:
2- Use CurrentSessionContext.Bind(session); in your BeginRequest and CurrentSessionContext.Unbind(sessionFactory); in your EndRequest
Hope it helps.