Share via


Konfigurationsverwaltung

Hinweis

Dieses eBook wurde im Frühjahr 2017 veröffentlicht und wurde seitdem nicht aktualisiert. Es gibt vieles im Buch, das wertvoll bleibt, aber ein Teil des Materials ist veraltet.

Einstellungen ermöglichen die Trennung von Daten, die das Verhalten einer App mit Code konfigurieren, sodass das Verhalten geändert werden kann, ohne die App neu zu erstellen. Es gibt zwei Arten von Einstellungen: App-Einstellungen und Benutzereinstellungen.

App-Einstellungen sind Daten, die von einer App erstellt und verwaltet werden. Sie können Daten wie feste Webdienstendpunkte, API-Schlüssel und den Laufzeitzustand enthalten. App-Einstellungen sind an das Vorhandensein der App gebunden und nur für diese App sinnvoll.

Benutzereinstellungen sind die anpassbaren Einstellungen einer App, die sich auf das Verhalten der App auswirken und keine häufige erneute Anpassung erfordern. Beispielsweise kann eine App dem Benutzer angeben, wo Daten abgerufen werden sollen und wie sie auf dem Bildschirm angezeigt werden sollen.

Xamarin.Forms enthält ein persistentes Wörterbuch, das zum Speichern von Einstellungsdaten verwendet werden kann. Auf dieses Wörterbuch kann mithilfe der Application.Current.Properties -Eigenschaft zugegriffen werden, und alle darin gespeicherten Daten werden gespeichert, wenn die App in einen Ruhezustand versetzt wird, und werden wiederhergestellt, wenn die App fortgesetzt oder erneut gestartet wird. Darüber hinaus verfügt die Application -Klasse auch über eine SavePropertiesAsync -Methode, mit der eine App ihre Einstellungen bei Bedarf speichern kann. Weitere Informationen zu diesem Wörterbuch finden Sie unter Eigenschaftenwörterbuch.

Ein Nachteil beim Speichern von Daten mithilfe des persistenten Xamarin.Forms Wörterbuchs besteht darin, dass daten nicht einfach an sie gebunden werden. Daher verwendet die mobile eShopOnContainers-App die Xam.Plugins.Settings-Bibliothek, die über NuGet verfügbar ist. Diese Bibliothek bietet einen konsistenten, typsicheren, plattformübergreifenden Ansatz zum Beibehalten und Abrufen von App- und Benutzereinstellungen unter Verwendung der systemeigenen Einstellungsverwaltung, die von jeder Plattform bereitgestellt wird. Darüber hinaus ist es einfach, Datenbindung zu verwenden, um auf Einstellungsdaten zuzugreifen, die von der Bibliothek verfügbar gemacht werden.

Hinweis

Während die Xam.Plugin.Settings-Bibliothek sowohl App- als auch Benutzereinstellungen speichern kann, unterscheidet sie nicht zwischen den beiden.

Erstellen einer Einstellungsklasse

Wenn Sie die Xam.Plugins.Settings-Bibliothek verwenden, sollte eine einzelne statische Klasse erstellt werden, die die für die App erforderlichen App- und Benutzereinstellungen enthält. Das folgende Codebeispiel zeigt die Settings-Klasse in der mobilen eShopOnContainers-App:

public static class Settings  
{  
    private static ISettings AppSettings  
    {  
        get  
        {  
            return CrossSettings.Current;  
        }  
    }  
    ...  
}

Einstellungen können über die ISettings API gelesen und geschrieben werden, die von der Xam.Plugins.Settings-Bibliothek bereitgestellt wird. Diese Bibliothek stellt einen Singleton bereit, der für den Zugriff auf die API verwendet werden kann, CrossSettings.Currentund die Einstellungsklasse einer App sollte diesen Singleton über eine ISettings Eigenschaft verfügbar machen.

Hinweis

Die Verwendung von Anweisungen für die Namespaces Plugin.Settings und Plugin.Settings.Abstractions sollte einer Klasse hinzugefügt werden, die Zugriff auf die Bibliothekstypen Xam.Plugins.Settings erfordert.

Hinzufügen einer Einstellung

Jede Einstellung besteht aus einem Schlüssel, einem Standardwert und einer Eigenschaft. Das folgende Codebeispiel zeigt alle drei Elemente für eine Benutzereinstellung, die die Basis-URL für die Onlinedienste darstellt, mit der die mobile eShopOnContainers-App eine Verbindung herstellt:

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);  
        }  
    }  
}

Der Schlüssel ist immer eine const-Zeichenfolge, die den Schlüsselnamen definiert, wobei der Standardwert für die Einstellung ein statischer schreibgeschützter Wert des erforderlichen Typs ist. Durch die Angabe eines Standardwerts wird sichergestellt, dass ein gültiger Wert verfügbar ist, wenn eine nicht festgelegte Einstellung abgerufen wird.

Die UrlBase statische Eigenschaft verwendet zwei Methoden der ISettings API, um den Einstellungswert zu lesen oder zu schreiben. Die ISettings.GetValueOrDefault -Methode wird verwendet, um den Wert einer Einstellung aus dem plattformspezifischen Speicher abzurufen. Wenn für die Einstellung kein Wert definiert ist, wird stattdessen ihr Standardwert abgerufen. Ebenso wird die -Methode verwendet, um den ISettings.AddOrUpdateValue Wert einer Einstellung im plattformspezifischen Speicher beizubehalten.

Wenn Sie stattdessen einen Standardwert innerhalb der Settings -Klasse definieren, ruft die UrlBaseDefault Zeichenfolge ihren Wert aus der GlobalSetting -Klasse ab. Das folgende Codebeispiel zeigt die BaseEndpoint Eigenschaft und UpdateEndpoint Methode in dieser Klasse:

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);  
    }  
}

Jedes Mal, wenn die BaseEndpoint -Eigenschaft festgelegt wird, wird die UpdateEndpoint -Methode aufgerufen. Diese Methode aktualisiert eine Reihe von Eigenschaften, die alle auf der Benutzereinstellung basieren, die UrlBase von der -Klasse bereitgestellt wird, die Settings verschiedene Endpunkte darstellen, mit denen die mobile eShopOnContainers-App eine Verbindung herstellt.

Datenbindung an Benutzereinstellungen

In der mobilen App SettingsView eShopOnContainers werden zwei Benutzereinstellungen verfügbar gemacht. Diese Einstellungen ermöglichen die Konfiguration, ob die App Daten von Microservices abrufen soll, die als Docker-Container bereitgestellt werden, oder ob die App Daten von Pseudodiensten abrufen soll, für die keine Internetverbindung erforderlich ist. Wenn Sie Daten aus containerisierten Microservices abrufen möchten, muss eine Basisendpunkt-URL für die Microservices angegeben werden. Abbildung 7-1 zeigt, SettingsView wann der Benutzer daten aus containerisierten Microservices abrufen möchte.

Benutzereinstellungen, die von der mobilen eShopOnContainers-App verfügbar gemacht werden

Abbildung 7-1: Benutzereinstellungen, die von der mobilen eShopOnContainers-App verfügbar gemacht werden

Die Datenbindung kann zum Abrufen und Festlegen von Einstellungen verwendet werden, die von der Settings -Klasse verfügbar gemacht werden. Dies wird durch Steuerelemente für die Ansichtsbindung erreicht, um Modelleigenschaften anzuzeigen, die wiederum auf Eigenschaften in der Klasse zugreifen, und eine Benachrichtigung zur Änderung der Settings Eigenschaft auslösen, wenn sich der Einstellungswert geändert hat. Informationen dazu, wie die mobile eShopOnContainers-App Ansichtsmodelle erstellt und mit Ansichten verknüpft, finden Sie unter Automatisches Erstellen eines Ansichtsmodells mit einem Ansichtsmodell-Locator.

Das folgende Codebeispiel zeigt das Entry Steuerelement von , SettingsView das es dem Benutzer ermöglicht, eine Basisendpunkt-URL für die containerisierten Microservices einzugeben:

<Entry Text="{Binding Endpoint, Mode=TwoWay}" />

Dieses Entry-Steuerelement wird mithilfe einer bidirektionalen Bindung an die Endpoint-Eigenschaft der SettingsViewModel-Klasse gebunden. Das folgende Codebeispiel zeigt die Endpoint-Eigenschaft:

public string Endpoint  
{  
    get { return _endpoint; }  
    set  
    {  
        _endpoint = value;  

        if(!string.IsNullOrEmpty(_endpoint))  
        {  
            UpdateEndpoint(_endpoint);  
        }  

        RaisePropertyChanged(() => Endpoint);  
    }  
}

Wenn die Endpoint -Eigenschaft festgelegt ist, wird die UpdateEndpoint -Methode aufgerufen, vorausgesetzt, der angegebene Wert ist gültig, und die Benachrichtigung zu Eigenschaftsänderungen wird ausgelöst. Die UpdateEndpoint-Methode wird in folgendem Codebeispiel veranschaulicht:

private void UpdateEndpoint(string endpoint)  
{  
    Settings.UrlBase = endpoint;  
}

Diese Methode aktualisiert die UrlBase Eigenschaft in der Settings -Klasse mit dem vom Benutzer eingegebenen Basisendpunkt-URL-Wert, wodurch er im plattformspezifischen Speicher beibehalten wird.

SettingsView Wenn zu navigiert wird, wird die InitializeAsync -Methode in der SettingsViewModel -Klasse ausgeführt. Im folgenden Codebeispiel wird diese Methode veranschaulicht:

public override Task InitializeAsync(object navigationData)  
{  
    ...  
    Endpoint = Settings.UrlBase;  
    ...  
}

Die -Methode legt die Endpoint -Eigenschaft auf den Wert der UrlBase -Eigenschaft in der Settings -Klasse fest. Durch den Zugriff auf die UrlBase -Eigenschaft ruft die Xam.Plugins.Settings-Bibliothek den Einstellungswert aus dem plattformspezifischen Speicher ab. Informationen zum Aufrufen der InitializeAsync Methode finden Sie unter Übergeben von Parametern während der Navigation.

Dieser Mechanismus stellt sicher, dass Benutzereinstellungen aus dem plattformspezifischen Speicher abgerufen und über die Datenbindung angezeigt werden, wenn ein Benutzer zur Einstellungsansicht navigiert. Wenn der Benutzer dann die Einstellungswerte ändert, stellt die Datenbindung sicher, dass sie sofort wieder im plattformspezifischen Speicher gespeichert werden.

Zusammenfassung

Einstellungen ermöglichen die Trennung von Daten, die das Verhalten einer App mit Code konfigurieren, sodass das Verhalten geändert werden kann, ohne die App neu zu erstellen. App-Einstellungen sind Daten, die eine App erstellt und verwaltet, und Benutzereinstellungen sind die anpassbaren Einstellungen einer App, die sich auf das Verhalten der App auswirken und keine häufige erneute Anpassung erfordern.

Die Xam.Plugins.Settings-Bibliothek bietet einen konsistenten, typsicheren, plattformübergreifenden Ansatz zum Beibehalten und Abrufen von App- und Benutzereinstellungen, und die Datenbindung kann verwendet werden, um auf einstellungen zuzugreifen, die mit der Bibliothek erstellt wurden.