Správa konfigurace
Poznámka:
Tato elektronická kniha byla publikována na jaře roku 2017 a od té doby nebyla aktualizována. Existuje mnoho v knize, která zůstává cenná, ale některé materiály jsou zastaralé.
Nastavení umožňují oddělení dat, která konfigurují chování aplikace od kódu, což umožňuje měnit chování bez opětovného sestavení aplikace. Existují dva typy nastavení: nastavení aplikace a uživatelská nastavení.
Nastavení aplikace jsou data, která aplikace vytváří a spravuje. Může zahrnovat data, jako jsou pevné koncové body webové služby, klíče rozhraní API a stav modulu runtime. Nastavení aplikace je svázané s existencí aplikace a jsou pro tuto aplikaci smysluplná.
Uživatelská nastavení jsou přizpůsobitelná nastavení aplikace, která ovlivňují chování aplikace a nevyžadují časté opakované úpravy. Aplikace může například uživateli umožnit určit, odkud se mají načítat data a jak je zobrazit na obrazovce.
Xamarin.Forms obsahuje trvalý slovník, který lze použít k ukládání dat nastavení. K tomuto slovníku Application.Current.Properties
se dá přistupovat pomocí vlastnosti a všechna data, která se do ní umístí, se uloží, když aplikace přejde do stavu spánku, a obnoví se, když se aplikace obnoví nebo znovu spustí. Kromě toho třída má také metoduSavePropertiesAsync
, Application
která aplikaci umožňuje uložit jeho nastavení v případě potřeby. Další informace o tomto slovníku naleznete v tématu Vlastnosti slovníku.
Nevýhodou ukládání dat pomocí Xamarin.Forms trvalého slovníku je, že nejsou snadno svázaná s daty. Mobilní aplikace eShopOnContainers proto používá knihovnu Xam.Plugins.Settings dostupnou z NuGetu. Tato knihovna poskytuje konzistentní, typově bezpečný a multiplatformní přístup k zachování a načítání nastavení aplikací a uživatelů při používání nativní správy nastavení poskytovaných jednotlivými platformami. Kromě toho je jednoduché použít datovou vazbu pro přístup k datům nastavení vystaveným knihovnou.
Poznámka:
I když knihovna Xam.Plugin.Settings může ukládat nastavení aplikace i uživatele, nerozlišuje se mezi nimi.
Vytvoření třídy Nastavení
Při použití knihovny Xam.Plugins.Settings by se měla vytvořit jedna statická třída, která bude obsahovat nastavení aplikace a uživatele vyžadované aplikací. Následující příklad kódu ukazuje třídu Settings v mobilní aplikaci eShopOnContainers:
public static class Settings
{
private static ISettings AppSettings
{
get
{
return CrossSettings.Current;
}
}
...
}
Nastavení je možné číst a zapisovat prostřednictvím ISettings
rozhraní API, které poskytuje knihovna Xam.Plugins.Settings. Tato knihovna poskytuje jedenton, který lze použít pro přístup k rozhraní API, CrossSettings.Current
a třída nastavení aplikace by měla zveřejnit tento singleton prostřednictvím ISettings
vlastnosti.
Poznámka:
Do třídy, která vyžaduje přístup k typům knihovny Xam.Plugins.Settings.Settings, by se měly přidat direktivy Using pro obory názvů Plugin.Settings a Plugin.Settings.
Přidání nastavení
Každé nastavení se skládá z klíče, výchozí hodnoty a vlastnosti. Následující příklad kódu ukazuje všechny tři položky pro uživatelské nastavení, které představuje základní adresu URL pro online služby, ke které se mobilní aplikace eShopOnContainers připojuje:
public static class Settings
{
...
private const string IdUrlBase = "url_base";
private static readonly string UrlBaseDefault = GlobalSetting.Instance.BaseEndpoint;
...
public static string UrlBase
{
get
{
return AppSettings.GetValueOrDefault<string>(IdUrlBase, UrlBaseDefault);
}
set
{
AppSettings.AddOrUpdateValue<string>(IdUrlBase, value);
}
}
}
Klíč je vždy const řetězec, který definuje název klíče s výchozí hodnotou pro nastavení statickou jen pro čtení požadovaného typu. Když zadáte výchozí hodnotu, zajistíte, že je platná hodnota k dispozici, pokud se načte nastavení bez nastavení.
Statická UrlBase
vlastnost používá dvě metody z ISettings
rozhraní API ke čtení nebo zápisu hodnoty nastavení. Metoda ISettings.GetValueOrDefault
se používá k načtení hodnoty nastavení z úložiště specifického pro platformu. Pokud není pro nastavení definována žádná hodnota, její výchozí hodnota se místo toho načte. Podobně se ISettings.AddOrUpdateValue
metoda používá k zachování hodnoty nastavení do úložiště specifického pro platformu.
Místo toho, aby definoval výchozí hodnotu uvnitř Settings
třídy, UrlBaseDefault
řetězec získá jeho hodnotu z GlobalSetting
třídy. Následující příklad kódu ukazuje vlastnost a UpdateEndpoint
metodu BaseEndpoint
v této třídě:
public class GlobalSetting
{
...
public string BaseEndpoint
{
get { return _baseEndpoint; }
set
{
_baseEndpoint = value;
UpdateEndpoint(_baseEndpoint);
}
}
...
private void UpdateEndpoint(string baseEndpoint)
{
RegisterWebsite = string.Format("{0}:5105/Account/Register", baseEndpoint);
CatalogEndpoint = string.Format("{0}:5101", baseEndpoint);
OrdersEndpoint = string.Format("{0}:5102", baseEndpoint);
BasketEndpoint = string.Format("{0}:5103", baseEndpoint);
IdentityEndpoint = string.Format("{0}:5105/connect/authorize", baseEndpoint);
UserInfoEndpoint = string.Format("{0}:5105/connect/userinfo", baseEndpoint);
TokenEndpoint = string.Format("{0}:5105/connect/token", baseEndpoint);
LogoutEndpoint = string.Format("{0}:5105/connect/endsession", baseEndpoint);
IdentityCallback = string.Format("{0}:5105/xamarincallback", baseEndpoint);
LogoutCallback = string.Format("{0}:5105/Account/Redirecting", baseEndpoint);
}
}
Pokaždé, BaseEndpoint
když je vlastnost nastavena, UpdateEndpoint
je volána metoda. Tato metoda aktualizuje řadu vlastností, z nichž všechny jsou založené na UrlBase
uživatelském nastavení poskytovaném Settings
třídou, které představují různé koncové body, ke kterým se mobilní aplikace eShopOnContainers připojuje.
Datová vazba s uživatelským nastavením
V mobilní aplikaci SettingsView
eShopOnContainers zveřejňuje dvě uživatelská nastavení. Tato nastavení umožňují nakonfigurovat, jestli má aplikace načítat data z mikroslužeb nasazených jako kontejnery Dockeru, nebo jestli by aplikace měla načítat data ze napodobených služeb, které nevyžadují připojení k internetu. Při volbě načtení dat z kontejnerizovaných mikroslužeb je nutné zadat adresu URL základního koncového bodu pro mikroslužby. Obrázek 7–1 ukazuje SettingsView
, kdy se uživatel rozhodl načíst data z kontejnerizovaných mikroslužeb.
Obrázek 7-1: Uživatelská nastavení vystavená mobilní aplikací eShopOnContainers
Datová vazba se dá použít k načtení a nastavení vystavených Settings
třídou. Toho lze dosáhnout pomocí ovládacích prvků na vazbě zobrazení pro zobrazení vlastností modelu, které zase přistupují vlastnosti ve Settings
třídě, a zvýšení oznámení o změně vlastnosti v případě, že se hodnota nastavení změnila. Informace o tom, jak mobilní aplikace eShopOnContainers vytváří modely zobrazení a přidruží je k zobrazení, naleznete v tématu Automatické vytvoření modelu zobrazení pomocí lokátoru modelu zobrazení.
Následující příklad kódu ukazuje Entry
ovládací prvek, SettingsView
který uživateli umožňuje zadat adresu URL základního koncového bodu pro kontejnerizované mikroslužby:
<Entry Text="{Binding Endpoint, Mode=TwoWay}" />
Tento Entry
ovládací prvek vytvoří vazbu na Endpoint
vlastnost SettingsViewModel
třídy pomocí obousměrné vazby. Následující příklad kódu ukazuje vlastnost Endpoint:
public string Endpoint
{
get { return _endpoint; }
set
{
_endpoint = value;
if(!string.IsNullOrEmpty(_endpoint))
{
UpdateEndpoint(_endpoint);
}
RaisePropertyChanged(() => Endpoint);
}
}
Endpoint
Při nastavení vlastnosti je volána metoda za předpokladuUpdateEndpoint
, že zadaná hodnota je platná a vlastnost změněna oznámení je vyvolána. Následující příklad kódu ukazuje metodu UpdateEndpoint
:
private void UpdateEndpoint(string endpoint)
{
Settings.UrlBase = endpoint;
}
Tato metoda aktualizuje UrlBase
vlastnost třídy Settings
hodnotou URL základního koncového bodu zadaná uživatelem, což způsobí, že se trvale uloží do úložiště specifického pro platformu.
SettingsView
Při přechodu na metodu InitializeAsync
SettingsViewModel
ve třídě se spustí. Následující příklad kódu ukazuje tuto metodu:
public override Task InitializeAsync(object navigationData)
{
...
Endpoint = Settings.UrlBase;
...
}
Metoda nastaví Endpoint
vlastnost na hodnotu UrlBase
vlastnosti ve Settings
třídě. UrlBase
Přístup k vlastnosti způsobí, že knihovna Xam.Plugins.Settings načte hodnotu nastavení z úložiště specifického pro platformu. Informace o InitializeAsync
vyvolání metody naleznete v tématu Předávání parametrů během navigace.
Tento mechanismus zajišťuje, že pokaždé, když uživatel přejde na SettingsView, uživatelská nastavení se načtou z úložiště specifického pro platformu a zobrazí se prostřednictvím datové vazby. Pokud pak uživatel změní hodnoty nastavení, datová vazba zajistí, že se okamžitě zachovají zpět do úložiště specifického pro platformu.
Shrnutí
Nastavení umožňují oddělení dat, která konfigurují chování aplikace od kódu, což umožňuje měnit chování bez opětovného sestavení aplikace. Nastavení aplikace jsou data, která aplikace vytváří a spravuje, a uživatelská nastavení jsou přizpůsobitelná nastavení aplikace, která ovlivňují chování aplikace a nevyžadují časté opakované úpravy.
Knihovna Xam.Plugins.Settings poskytuje konzistentní, typově bezpečný a multiplatformní přístup pro zachování a načítání nastavení aplikací a uživatelů a datové vazby je možné použít pro přístup k nastavením vytvořeným v knihovně.