懒惰的Singleton持久存在于用户之间

时间:2014-06-26 20:37:03

标签: c# session design-patterns singleton dispose

我有一个Lazy Singleton,用作Web应用程序的参考对象。

它存储了在整个应用程序中反复使用的基本属性:

public class Context
{
    public string UserName;
    public Guid TenantId;

    public static Context Current { get { return lazy.Value; } }
    private static readonly Lazy<Context> lazy = 
                              new Lazy<Context>(() => new Context());
}
//In Action
public static Something GetSomethingForUser()
{
    return DataAccess.GetSomethingForCurrentUser(Context.Current.UserName);
}

问题是,如果用户登录和退出我的Context会在会话期间持续存在。

这并不意外,我没有处理它。

我应该在哪里这样做?什么是最好的方法?

我应该在退出时这样做吗?

    public void SignOut()
    {
        Context.Dispose();
        HttpContext.GetOwinContext().Authentication.SignOut(
            OpenIdConnectAuthenticationDefaults.AuthenticationType,
              CookieAuthenticationDefaults.AuthenticationType);
    }

1 个答案:

答案 0 :(得分:1)

在我看来,注销应该是其他类可以注册并响应它的正确行动的事件。

如果您一次只有1个活跃用户,那么您使用单身人士的方式似乎没问题。

另一个解决了注销问题的解决方案,就是将单例内的数据放入会话本身。