实例化的类是否对每个用户都是唯一的?

时间:2013-12-18 01:15:25

标签: c# asp.net class instantiation

给出以下主页或内容页...............

namespace Intranet
{
    public partial class Site : System.Web.UI.MasterPage
    {
        WebSite.Security.Users.CurrentUser currentUser;

        protected void Page_Init(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                currentUser = new WebSite.Security.Users.CurrentUser();
                currentUser = WebSite.Security.Users.GetCurrentUser(currentUser);
                Label_UserId.Text = currentUser.UserId;
            }
        }
    }
}

调用以下内容............

namespace Intranet
{
    public class WebSite
    {
        public class Security
        {
            public class Users
            {
                public class CurrentUser
                {
                    public string UserId { get; set; }
                }
                public static CurrentUser GetCurrentUser(CurrentUser cu)
                {
                    cu.UserId = "MethodThatGetsUserId";
                    return cu;
                }
            }
        }
    }
}

返回的实例化类'currentUser'是否包含唯一信息,即使页面上同时有多个不同的用户?

感谢您的时间和见解。

2 个答案:

答案 0 :(得分:3)

是的,即使不是每个用户,也会为每个请求实例化一个新类。

将共享类中的静态字段,您应该使用会话和应用程序数据跨请求或用户共享数据。

答案 1 :(得分:2)

不,这一行:

 currentUser = new WebSite.Security.Users.CurrentUser();

您正在母版页类中创建新实例。除非您使用request变量,否则每个static中创建的实例仅在该请求中可用(当然,具体取决于范围)。在您的应用程序中,all users/threads的静态变量是相同的。

但是,您实际想要做的是获取当前用户。这应该使用HttpContext.Current.UserPage.Current IPrincipal来完成,并且应该包含您在应用的Authenticate_Request方法中填写的信息。

要了解有关ASP.NET表单身份验证的更多信息,请参阅:http://msdn.microsoft.com/en-us/library/9wff0kyh(v=vs.100).aspx