IsolatedStorageSettings

Tomáš Holan       1. 6. 2012       I/O operace       6059 zobrazení

Isolated storage je uložiště určené pro ukládání perzistentních dat (nejčastěji například konfigurace) s platností pro aplikaci a počítač případně aplikaci a Windows uživatele. V .NET Frameworku implementace Isolated storage zahrnuje dvojici tříd IsolatedStorageFile a IsolatedStorageFileStream. Kromě desktopu je Isolated storage implementován i v Silverlight a případně na platformě Windows Phone (a Windows Metro), kde navíc obsahuje i třídu IsolatedStorageSettings. Protože třída IsolatedStorageSettings může být ale využitelná i ve WPF/Windows Forms, překládám zde její implementaci určenou pro tyto typy aplikací.

Isolated storage je implementován jako speciální složka na file systému, která se nachází buď pod uživatelským profilem nebo v profilu “All users” (v případě ukládání dat s platností pro celý počítač). Třídy IsolatedStorageFile a IsolatedStorageFileStream proto umožňují pracovat s vybraným storem souborově obdobně jako když přistupujeme na standardní file system (lze vytvářet podsložky a soubory).

Třída IsolatedStorageSettings je naopak kolekce aplikačních nastavení typu klíč/hodnota a přistupuje se k ní stejně, jako k objektu typu Dictionary. Realizováno je to pomoci serializace a deserializace tohoto dictionary do souboru na Isolated storage (tento soubor má konkrétně název “__LocalSettings” bez přípony).

V Silverlight je na třídě IsolatedStorageSettings k dispozici jedna kolekce na úrovni aplikace (statická vlastnost ApplicationSettings) a jedna kolekce na úrovni celé domény - podle url aplikace (statická vlastnost SiteSettings). Na desktopu nemá úroveň domény smysl, proto v naportované implementaci je pouze nastavení platné pro danou aplikaci přístupné statickou vlastností ApplicationSettings. Store pro toto nastavení se interně otevírá jako IsolatedStorageScope.Machine, IsolatedStorageScope.Assembly scope pro assembly vrácenou metodou Assembly.GetEntryAssembly.

var assembly = System.Reflection.Assembly.GetEntryAssembly();
if (assembly == null)
{
    throw new IsolatedStorageException("Enable to determine application entry assembly.");
}
this._appStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.Machine | IsolatedStorageScope.Assembly, null, null, assembly.Evidence, null);

Druhým rozdílem od Silverlight implementace je nutnost explicitního volání uložení nastavení tj. metody Save při používání této třídy. Toto je způsobeno tím, že uložení aktuálního nastavení do perzistentního souboru na isolated storage je standardně v implementaci voláno pouze ve finalizéru této třídy a ten při ukončení desktop aplikace nemusí být zavolán.

Třída IsolatedStorageSettings je k dispozici zde. Její použití může pak vypadat následovně:

public static int Foo
{
    get
    {
        int value;
        if (IsolatedStorageSettings.ApplicationSettings.TryGetValue<int>("Foo", out value))
        {
            return value;
        }
        return 0;   //Default value
    }
    set
    {
        IsolatedStorageSettings.ApplicationSettings["Foo"] = value;
        IsolatedStorageSettings.ApplicationSettings.Save();
    }
}

 

hodnocení článku

1 bodů / 1 hlasů       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback