ASP.NET静态支柱相同的域混淆



我在这里读了一个答案,他说:

静态是应用程序域独有的,该应用程序域的所有用户将共享每个静态属性的相同值

但是我现在很困惑,我为许多用户创建一个项目,他们当然会共享同一域。

理解的示例代码:

public static class ApplicationSession
{
    private static readonly ICurrentSession Session;
    static ApplicationSession()
    {
        if (HttpContext.Current == null)
            Session = new ThreadedCurrentSession();
        else
        {
            Session = new WebCurrentSession();
        }
    }
    public static T GetObject<T>(string key) where T : class
    {
        return (T)Session.GetItem(key);
    }
    public static void SetObject<T>(string key, T t) where T : class
    {
        Session.SetItem(key, t);
    }
}
 public static SysUser CurrentUser
    {
        get
        {
            var currentusr = ApplicationSession.GetObject<SysUser>("CurrentUser");
            if (currentusr == null)
            {
                currentusr = SysUserAccessor.CreateEmptyUser();
                currentusr.SetRoles(new List<FrUserRole>());
                ApplicationSession.SetObject("CurrentUser", currentusr);
            }
            return currentusr;
        }
    }

sysuser 是我的模型,它拖动了我的用户和我的用户角色...

,如果他们 authenticate 或其他东西,请帮助他们现在共享相同的sysuser模型。请帮助:)

您的应用程序课程是静态的,您可以在其静态构造函数上初始化会话对象。NOTO认为,在首次访问该类型时,整个应用程序寿命仅称静态构造函数(或类型构造函数)(例如创建其成员,称其静态属性等)。因此,在您的情况下,会话变量将仅在ThreadedCurrentsessess或WebCurrentsessess类中初始初始化一次(取决于第一次访问应用程序类型时HTTPCONTECT是否存在)。

由于当前使用者属性与您的会话对象有关,因此它将为所有用户请求提供相同的sysuser对象。

最新更新