首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用ASP.NET会话进行生命周期管理(统一)

使用ASP.NET会话进行生命周期管理(统一)
EN

Stack Overflow用户
提问于 2009-04-01 20:07:46
回答 7查看 8.6K关注 0票数 17

我正在考虑使用Unity来管理自定义user类实例的生命周期。我计划用一个自定义的ASP.NET会话管理器来扩展LifetimeManager。我希望能够做的是从我的自定义类中存储和检索当前登录的user对象,并让Unity从ASP.NET中的session对象中获取User的实例,或者(当在Win32项目中时)静态地或从当前线程中检索它。

到目前为止,我最好的解决方案是在启动时创建Unity容器的静态实例,并使用Resolve方法从我的每个类中获取User对象。然而,这似乎在我的其他类中创建了对unity容器的依赖。实现这一目标的更“团结”的方式是什么?我希望能够从任何类读取/替换当前的User实例。

EN

回答 7

Stack Overflow用户

发布于 2010-07-29 14:07:39

当你使用Unity MVC而不是普通的ASP.Net项目时,你会得到最好的效果。MVC允许你使用像Unity这样的容器来管理用户对象、控制器、模型等。如果可能的话,在你的项目中使用ASP.Net而不是ASP.net web表单。

如果我理解正确的话,您应该使用Unity来维护每个会话的对象的生命周期。您需要实现一个扩展LifetimeManager的SessionLifetimeManager。代码非常简单,并遵循以下几行:

public class SessionLifetimeManager : LifetimeManager
{
    private string _key = Guid.NewGuid().ToString();

    public override object GetValue()
    {
          return HttpContext.Current.Session[_key];
    }

    public override void SetValue(object value)
    {
          HttpContext.Current.Session[_key] = value;
    }

    public override void RemoveValue()
    {
          HttpContext.Current.Session.Remove(_key);
    }
}

您也可以为PerWebRequest生命周期管理编写一个类似的脚本。

票数 15
EN

Stack Overflow用户

发布于 2009-05-23 15:58:15

为什么不使用缓存对象instead...then,你可以在win和web上使用它。如下所示:

    IUnityContainer container= HttpRuntime.Cache.Get("Unity") as IUnityContainer;

    if (container == null)
    {
        container= // init container

        HttpRuntime.Cache.Add("Unity",
            container,
            null,
            Cache.NoAbsoluteExpiration,
            Cache.NoSlidingExpiration,
            CacheItemPriority.NotRemovable,
            null);
    }

    // return container or something

HttpRuntime.Cache可以在win和web中运行

票数 2
EN

Stack Overflow用户

发布于 2009-04-01 20:11:31

我认为您需要两个通过unity公开的服务(或者一个同时执行两个操作的服务)。

不存储user对象,而是存储一个接口实现,该接口实现公开一个方法/属性,该方法/属性将为您获取user对象。在ASP.NET中,您将从会话中检索用户。在WinForm解决方案(或其他解决方案)中,您可以从正在执行的线程中获取它。

您还将拥有一个set方法/属性,用于设置用户。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/707138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档