我有一个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);
}
答案 0 :(得分:1)
在我看来,注销应该是其他类可以注册并响应它的正确行动的事件。
如果您一次只有1个活跃用户,那么您使用单身人士的方式似乎没问题。
另一个解决了注销问题的解决方案,就是将单例内的数据放入会话本身。