[ miki_ja @ 22.08.2006. 17:15 ] @
Muči me jedan problem, mislim da je jednostavan, ali...

U jednoj klasi imam jedno statičko polje i svojstvo za to polje. Iz druge klase zadajem vrednost promenjljivoj preko svojstva (jedan string) i dok je program aktivan, radi s tom promenjljivom normalno.

Šta treba da uradim da bi promenjljiva imala zadatu vrednost i pri ponovnom pokretanju programa?
[ aleksandarpopov @ 22.08.2006. 17:39 ] @
A da upises u fajl ili u bazu ili u Registry...?
[ miki_ja @ 22.08.2006. 18:12 ] @
Da, razmišjao sam da je sačuvam u bazi, to ne bi bio neki problem, međutim interesuje me kako da to izvedem na pomenuti način.
[ dusans @ 22.08.2006. 18:25 ] @
Ne postoji drugi nacin (bar ne jednostavniji od ovih), pa biraj - baza, registry ili fajl...
[ misk0 @ 22.08.2006. 22:03 ] @
Mozes 'serijalizirati' objekt tj prije nego izadjes iz programa snimis sadrzaj njegovih promjenjivih u neki fajl.
Sledeci put kad pokreces aplikaciju, provjeris ima li fajla i ako postoji ucitas vrijednosti iz njega.
[ NrmMyth @ 22.08.2006. 22:27 ] @
svojstvo == property ?
[ VerbatimBOT @ 23.08.2006. 08:37 ] @
Citat:
miki_ja: Da, razmišjao sam da je sačuvam u bazi, to ne bi bio neki problem, međutim interesuje me kako da to izvedem na pomenuti način.


Ne postoji mogućnost, jer se ti podaci čuvaju u promenljivoj (čitaj: memoriji), tako da kad isključiš aplikaciju memorija se prazni.
Citat:
misk0: Mozes 'serijalizirati' objekt tj prije nego izadjes iz programa snimis sadrzaj njegovih promjenjivih u neki fajl.
Sledeci put kad pokreces aplikaciju, provjeris ima li fajla i ako postoji ucitas vrijednosti iz njega.


Meni ovo deluje kao najjednostavnije rešenje.
[ Csharp @ 23.08.2006. 08:56 ] @
Ja sve takve stvari serijaliziram i to napravim klasu koja je serializable. Evo npr. napravio sam ExtendedDataGridView, gdje pamtim širinu i redoslijed kolona.
[ mmix @ 23.08.2006. 11:49 ] @
Citat:
VerbatimBOT: Meni ovo deluje kao najjednostavnije rešenje.


Ne obavezno, imaj u vidu da svi fajlovi koje ostavis za sobom a nisu deo setup-a dovode do toga da uninstall ne moze da ukloni folder zbog njih, prosto receno ostavljas djubre za sobom. Dalje, moras da imas bootstrap rutinu koja ce na pocetku programa da ucitava te fajlove i postavlja ih na odgovarajuce propertije koji mozda u tom trenutku jos i ne postoje.

Najjednostavniji princip jeste preko registry-ja (koji za to i sluzi inace) i on-demand ucitavanjem


u kvazi pseudo kodu (bez lockova):

Code:

field int _polje = null;

property Polje
{
    get
    {
        if (_polje == null) { ' ucitaj polje iz registry-ja ako je tamo}
        return _polje;
    }
    set
    {
        if (_polje != value) { 'snimi novu vrednost u registry }
        _polje = value;
    }
}

[ Oliver Klaćik @ 23.08.2006. 12:57 ] @
Zar nije najbolje čuvati vrednosti u Application Settings? Ako je u pitanju .NET 2.0...
[ mmix @ 23.08.2006. 13:39 ] @
Citat:
Oliver Klaćik: Zar nije najbolje čuvati vrednosti u Application Settings? Ako je u pitanju .NET 2.0...


Iako deluje tako, odgovor je i da i ne
Application/User settings sluze uglavnom za inicijalna podesavanja i sta vise veoma su nesrecno reseni i generisu dosta djubreta na disku (narocito user settings). Ceo taj koncept je nekako nadogradjen na nesrecno resenje iz frameworka 1.0 kad je "XCOPY deployment" bio in i sve je to daleko od zavrsenog. Ako hoces da vidis konkretan problem, kreiraj DLL projekat, ubaci u njega typed DataSet i generisi adaptere, conenction string ce otici u settings (tj u app.config). Sad taj DLL projekat "ubaci" u neki EXE projekat i vidi sta se desava sa tvojim podesavanjima (toliko o nezavisnom DAL-u). Da ne pominjem da koriscenje user settings-a kompletno sprecava prenosenje user settings-a sa XCOPY (posto je user config file zakopan negde u documents and settings)

U net2.0 settings se moze snimiti nazad u .config file, ali vodi racuna o tome da je to XML fajl i da svako snimanje izaziva parsiranje celog config file-a, deserijalizaciju/serijalizaciju tvoje settings klase i ponovno snimanje CELOG xml-a. Nije bas performance wise ako treba da snimis jedan integer.

Dakle odgovor je moze, ali ja i dalje vise volim registry (uostalom, kad se koristi roaming profile user hive je stvar koja ce 100% sigurno proci). Ako su hteli da mi pomognu mogli su da naprave wrapper settings klasu koja ce koristiti registry umesto file sistema, ovako nista od njih

BTW, nisam odavno gledao XP logo requirments, zadnji put kad sam gledao, jedan od uslova je bio da aplikacija smesta sva svoja podesavanja u registry pod odredjenim kljucem. Hmm, pretpostavljam da su morali to da promene inace 99% .net aplikacija ne bi moglo da dobije XP logo