Unity 解决方法

发布于 2024-09-18 18:30:02 字数 1113 浏览 15 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

叶落知秋 2024-09-25 18:30:03

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

为此:

1- 在 web 的 current_session_context_class 属性上的配置文件中配置它:

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

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:

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

2- Use CurrentSessionContext.Bind(session); in your BeginRequest and CurrentSessionContext.Unbind(sessionFactory); in your EndRequest

Hope it helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文