webForumDet fria alternativet

static class?

6 svar · 546 visningar · startad av doggelito

doggelitoMedlem sedan juni 20003 076 inlägg
#1

Yoo!
Jag försöker få till så att jag enkelt kan få ut ex. förnamn ur en inloggad användare.
Det första som slog mig då var en statisk klass så jag slipper instansiera men det vill sig inte riktigt! :l

Hur borde jag lösa detta?
Hit kom jag, sen blev det tvärnit!

public static class UserProfile
{
    private string _firstName;
    private string _lastName;
    private string _siteName;

    public static string FirstName
    {
        get { return _firstName; }
        set { _firstName = value; }
    }

    public static string LastName
    {
        get { return _lastName; }
        set { _lastName = value; }
    }

    public  string SiteName
    {
        get { return _siteName; }
        set { _siteName = value; }
    }

    public static UserProfile()
    {
        string userName = HttpContext.Current.User.Identity.Name;
        ProfileCommon pc = ((ProfileCommon)ProfileCommon.Create(userName));
        SiteManager sm = new SiteManager();
        Sites site = sm.GetSiteByUser(userName);

        _firstName = pc.FirstName;
        _lastName = pc.LastName;
        _siteName = site.SiteName;
    }
}

För- och efternamn har jag specat i web.config som utökade fält i profile providern så dem borde jag ju egentligen inte behöva speca här!?
Kan man ärva ProfileCommon på nått vis istället för att göra som jag försöker ovan att instansiera den i kontruktorn (som man inte får i en statisk klass)

Jag får heller inte deklarera medlemmar i en statisk klass som jag gör men jag kommer inte på hur jag bör göra!

Det jag vill få ut är ex. så här i slutändan

string siteName = UserProfile.SiteName;
erkaMedlem sedan dec. 19996 522 inlägg
#2

Du är medveten om att din statiska klass inte är trådsäker, vilket i din applikationer kommer innebära att informationen i ditt objekt kan ändras av dina olika användare, så de får fel information?

doggelitoMedlem sedan juni 20003 076 inlägg
#3

erka skrev:

Du är medveten om att din statiska klass inte är trådsäker

Nej, på vilket vis är den inte trådsäker och hur gör jag för att ändra?

erkaMedlem sedan dec. 19996 522 inlägg
#4

Finns en bra tråd om det i .net-forumet. Sök där. Det beror på att asp_net processen körs som en tråd

emissionMedlem sedan dec. 19996 721 inlägg
#5

Statiska instanser är gemensamma över hela applikationdomänen (AppDomain). Om du vill att det ska fungera som i ditt exempel så får du göra ungefär så här:

public static string SiteName
{
	get 
	{
		string userName = HttpContext.Current.User.Identity.Name;
		Sites site = sm.GetSiteByUser(userName);
		return site.SiteName;
	}
}
inspiroMedlem sedan sep. 2005673 inlägg
#6

Bara så jag fattat det rätt... om jag gör en statisk variabel så kommer alla användare av applikationen som når den att se samma innehåll?

emissionMedlem sedan dec. 19996 721 inlägg
#7

Japp!

124 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)