Zarządzanie konfiguracją
Uwaga
Ta książka elektroniczna została opublikowana wiosną 2017 r. i od tego czasu nie została zaktualizowana. Jest wiele w książce, która pozostaje cenna, ale niektóre z materiałów są przestarzałe.
Ustawienia umożliwiają rozdzielenie danych, które konfigurują zachowanie aplikacji z kodu, co pozwala na zmianę zachowania bez ponownego kompilowania aplikacji. Istnieją dwa typy ustawień: ustawienia aplikacji i ustawienia użytkownika.
Ustawienia aplikacji to dane tworzone przez aplikację i zarządzane przez nią. Może zawierać dane, takie jak stałe punkty końcowe usługi internetowej, klucze interfejsu API i stan środowiska uruchomieniowego. Ustawienia aplikacji są powiązane z istnieniem aplikacji i mają znaczenie tylko dla tej aplikacji.
Ustawienia użytkownika to dostosowywalne ustawienia aplikacji, które wpływają na zachowanie aplikacji i nie wymagają częstego ponownego dostosowywania. Na przykład aplikacja może pozwolić użytkownikowi określić miejsce pobierania danych oraz sposób wyświetlania go na ekranie.
Xamarin.Forms zawiera słownik trwały, który może służyć do przechowywania danych ustawień. Dostęp do tego słownika można uzyskać przy użyciu Application.Current.Properties
właściwości , a wszystkie dane umieszczone w nim są zapisywane, gdy aplikacja przechodzi w stan uśpienia i jest przywracana po wznowieniu lub ponownym uruchomieniu aplikacji. Ponadto klasa ma również metodęSavePropertiesAsync
, Application
która umożliwia aplikacji zapisanie ustawień w razie potrzeby. Aby uzyskać więcej informacji na temat tego słownika, zobacz Słownik właściwości.
Wadą przechowywania danych przy użyciu słownika Xamarin.Forms trwałego jest to, że nie są łatwo powiązane z danymi. W związku z tym aplikacja mobilna eShopOnContainers używa biblioteki Xam.Plugins.Settings dostępnej w witrynie NuGet. Ta biblioteka zapewnia spójne, bezpieczne dla wielu platform podejście do utrwalania i pobierania ustawień aplikacji i użytkowników przy użyciu funkcji zarządzania ustawieniami natywnymi udostępnianymi przez każdą platformę. Ponadto w celu uzyskania dostępu do danych uwidocznionych przez bibliotekę można łatwo użyć powiązania danych danych.
Uwaga
Biblioteka Xam.Plugin.Settings może przechowywać zarówno ustawienia aplikacji, jak i użytkownika, ale nie rozróżnia tych dwóch elementów.
Tworzenie klasy ustawień
W przypadku korzystania z biblioteki Xam.Plugins.Settings należy utworzyć pojedynczą klasę statyczną, która będzie zawierać ustawienia aplikacji i użytkownika wymagane przez aplikację. Poniższy przykład kodu przedstawia klasę Ustawienia w aplikacji mobilnej eShopOnContainers:
public static class Settings
{
private static ISettings AppSettings
{
get
{
return CrossSettings.Current;
}
}
...
}
Ustawienia można odczytywać i zapisywać za pośrednictwem interfejsu API, który jest udostępniany przez bibliotekę ISettings
Xam.Plugins.Settings. Ta biblioteka udostępnia jedenton, który może służyć do uzyskiwania dostępu do interfejsu API, CrossSettings.Current
, a klasa ustawień aplikacji powinna uwidocznić ten pojedynczy element za pośrednictwem ISettings
właściwości.
Uwaga
Używanie dyrektyw dla przestrzeni nazw Plugin.Settings i Plugin.Settings.Abstractions należy dodać do klasy, która wymaga dostępu do typów bibliotek Xam.Plugins.Settings.
Dodawanie ustawienia
Każde ustawienie składa się z klucza, wartości domyślnej i właściwości. Poniższy przykład kodu przedstawia wszystkie trzy elementy ustawienia użytkownika, które reprezentuje podstawowy adres URL dla Usługi online, z którymi łączy się aplikacja mobilna eShopOnContainers:
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);
}
}
}
Klucz jest zawsze ciągiem const, który definiuje nazwę klucza, a wartość domyślna ustawienia jest statyczną wartością tylko do odczytu wymaganego typu. Podanie wartości domyślnej gwarantuje, że prawidłowa wartość jest dostępna, jeśli zostanie pobrane ustawienie bez ustawienia.
Właściwość statyczna UrlBase
używa dwóch metod z interfejsu ISettings
API do odczytu lub zapisu wartości ustawienia. Metoda ISettings.GetValueOrDefault
służy do pobierania wartości ustawienia z magazynu specyficznego dla platformy. Jeśli dla ustawienia nie zdefiniowano żadnej wartości, zostanie pobrana jego wartość domyślna. ISettings.AddOrUpdateValue
Podobnie metoda jest używana do utrwalania wartości ustawienia dla magazynu specyficznego dla platformy.
Zamiast tego definiując wartość domyślną wewnątrz Settings
klasy, UrlBaseDefault
ciąg uzyskuje jego wartość z GlobalSetting
klasy. Poniższy przykład kodu przedstawia właściwość i UpdateEndpoint
metodę BaseEndpoint
w tej klasie:
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);
}
}
Za każdym razem, gdy BaseEndpoint
właściwość jest ustawiana, wywoływana UpdateEndpoint
jest metoda . Ta metoda aktualizuje serię właściwości, z których wszystkie są oparte na UrlBase
ustawieniu użytkownika udostępnianym przez Settings
klasę reprezentującą różne punkty końcowe, z którymi łączy się aplikacja mobilna eShopOnContainers.
Powiązanie danych z ustawieniami użytkownika
W aplikacji mobilnej eShopOnContainers uwidacznia SettingsView
dwa ustawienia użytkownika. Te ustawienia umożliwiają skonfigurowanie, czy aplikacja powinna pobierać dane z mikrousług wdrożonych jako kontenery platformy Docker, czy też aplikacja powinna pobierać dane z pozorowanych usług, które nie wymagają połączenia internetowego. Podczas wybierania pobierania danych z konteneryzowanych mikrousług należy określić podstawowy adres URL punktu końcowego dla mikrousług. Rysunek 7–1 pokazuje SettingsView
, kiedy użytkownik zdecydował się pobrać dane z konteneryzowanych mikrousług.
Rysunek 7–1. Ustawienia użytkownika uwidocznione przez aplikację mobilną eShopOnContainers
Powiązanie danych może służyć do pobierania i ustawiania ustawień uwidocznionych przez klasę Settings
. Jest to osiągane przez kontrolki powiązania widoku, aby wyświetlić właściwości modelu, które z kolei uzyskują dostęp do właściwości w Settings
klasie, i zgłaszają powiadomienie o zmianie właściwości, jeśli wartość ustawień uległa zmianie. Aby uzyskać informacje o tym, jak aplikacja mobilna eShopOnContainers tworzy modele wyświetlania i kojarzy je z widokami, zobacz Automatyczne tworzenie modelu widoku za pomocą lokalizatora modelu widoku.
Poniższy przykład kodu przedstawia kontrolkę Entry
z obiektu SettingsView
, która umożliwia użytkownikowi wprowadzenie podstawowego adresu URL punktu końcowego dla konteneryzowanych mikrousług:
<Entry Text="{Binding Endpoint, Mode=TwoWay}" />
Ta Entry
kontrolka Endpoint
wiąże się z właściwością SettingsViewModel
klasy przy użyciu powiązania dwukierunkowego. Poniższy przykład kodu przedstawia właściwość Endpoint:
public string Endpoint
{
get { return _endpoint; }
set
{
_endpoint = value;
if(!string.IsNullOrEmpty(_endpoint))
{
UpdateEndpoint(_endpoint);
}
RaisePropertyChanged(() => Endpoint);
}
}
Po ustawieniu Endpoint
właściwości wywoływana UpdateEndpoint
jest metoda, pod warunkiem, że podana wartość jest prawidłowa, a wywoływane jest powiadomienie o zmianie właściwości. Poniższy przykład kodu przedstawia metodę UpdateEndpoint
:
private void UpdateEndpoint(string endpoint)
{
Settings.UrlBase = endpoint;
}
Ta metoda aktualizuje UrlBase
właściwość w Settings
klasie przy użyciu wartości podstawowego adresu URL punktu końcowego wprowadzonej przez użytkownika, co powoduje jego utrwalone w magazynie specyficznym dla platformy.
Po przejściu SettingsView
do InitializeAsync
metody w SettingsViewModel
klasie jest wykonywana metoda . Poniższy przykład kodu przedstawia tę metodę:
public override Task InitializeAsync(object navigationData)
{
...
Endpoint = Settings.UrlBase;
...
}
Metoda ustawia Endpoint
właściwość na wartość UrlBase
właściwości w Settings
klasie. Uzyskiwanie UrlBase
dostępu do właściwości powoduje, że biblioteka Xam.Plugins.Settings pobiera wartość ustawień z magazynu specyficznego dla platformy. Aby uzyskać informacje na temat wywoływanej InitializeAsync
metody, zobacz Przekazywanie parametrów podczas nawigacji.
Ten mechanizm gwarantuje, że za każdym razem, gdy użytkownik przejdzie do elementu SettingsView, ustawienia użytkownika są pobierane z magazynu specyficznego dla platformy i prezentowane za pomocą powiązania danych. Następnie, jeśli użytkownik zmieni wartości ustawień, powiązanie danych gwarantuje, że zostaną natychmiast utrwalone z powrotem do magazynu specyficznego dla platformy.
Podsumowanie
Ustawienia umożliwiają rozdzielenie danych, które konfigurują zachowanie aplikacji z kodu, co pozwala na zmianę zachowania bez ponownego kompilowania aplikacji. Ustawienia aplikacji to dane tworzone przez aplikację i zarządzane przez nią, a ustawienia użytkownika to dostosowywalne ustawienia aplikacji, które mają wpływ na zachowanie aplikacji i nie wymagają częstego ponownego dostosowywania.
Biblioteka Xam.Plugins.Settings zapewnia spójne, bezpieczne dla wielu platform podejście do utrwalania i pobierania ustawień aplikacji i użytkownika, a powiązanie danych może służyć do uzyskiwania dostępu do ustawień utworzonych za pomocą biblioteki.