Udostępnij za pośrednictwem


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.

Ustawienia użytkownika udostępniane przez aplikację mobilną eShopOnContainers

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.