Konfigurationsverwaltung
Hinweis
Dieses eBook wurde im Frühjahr 2017 veröffentlicht und wurde seitdem nicht aktualisiert. Es gibt viel in dem Buch, das wertvoll bleibt, aber einige der Materialien sind 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 sind nur für diese App aussagekräftig.
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 erlauben, anzugeben, wo Daten abgerufen werden sollen, und wie sie auf dem Bildschirm angezeigt werden.
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 platzierten Daten werden gespeichert, wenn die App in einen Ruhezustand wechselt und wiederhergestellt wird, wenn die App fortgesetzt oder erneut gestartet wird. Darüber hinaus verfügt die Klasse auch über eine SavePropertiesAsync
Methode, mit der Application
eine App bei Bedarf ihre Einstellungen speichern kann. Weitere Informationen zu diesem Wörterbuch finden Sie unter Properties Dictionary.
Ein Nachteil beim Speichern von Daten mithilfe des Xamarin.Forms persistenten Wörterbuchs besteht darin, dass es sich nicht einfach um datengebundene Daten handelt. Daher verwendet die mobile eShopOnContainers-App die Xam.Plugins.Settings-Bibliothek, die von NuGet verfügbar ist. Diese Bibliothek bietet einen konsistenten, typsicheren, plattformübergreifenden Ansatz zum Beibehalten und Abrufen von App- und Benutzereinstellungen, während die systemeigene Einstellungsverwaltung verwendet wird, 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
Bei Verwendung der Xam.Plugins.Settings-Bibliothek sollte eine einzelne statische Klasse erstellt werden, die die für die App erforderlichen App- und Benutzereinstellungen enthält. Das folgende Codebeispiel zeigt die Einstellungsklasse 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 bietet ein Singleton, das für den Zugriff auf die API verwendet werden kann, CrossSettings.Current
und die Einstellungsklasse einer App sollte diesen Singleton über eine ISettings
Eigenschaft verfügbar machen.
Hinweis
Die Verwendung von Direktiven 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 Konstzeichenfolge, die den Schlüsselnamen definiert, wobei der Standardwert für die Einstellung ein statischer Schreibwert 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 aus der ISettings
API, um den Einstellungswert zu lesen oder zu schreiben. Die ISettings.GetValueOrDefault
Methode wird verwendet, um den Wert einer Einstellung aus plattformspezifischem Speicher abzurufen. Wenn für die Einstellung kein Wert definiert ist, wird stattdessen der Standardwert abgerufen. Ebenso wird die Methode verwendet, um den ISettings.AddOrUpdateValue
Wert einer Einstellung auf plattformspezifischen Speicher beizubehalten.
Anstatt einen Standardwert innerhalb der Settings
Klasse zu 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 von der UrlBase
Klasse bereitgestellt wird, die Settings
unterschiedliche Endpunkte darstellt, mit denen die mobile eShopOnContainers-App eine Verbindung herstellt.
Datenbindung an Benutzereinstellungen
In der mobilen eShopOnContainers-App SettingsView
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 aus simulierten Diensten abrufen soll, für die keine Internetverbindung erforderlich ist. Beim Abrufen von Daten aus containerisierten Microservices muss eine Basisendpunkt-URL für die Microservices angegeben werden. Abbildung 7-1 zeigt, wann sich der Benutzer für das SettingsView
Abrufen von Daten aus containerisierten Microservices entschieden hat.
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 in der Ansichtsbindung an Ansichtsmodelleigenschaften erreicht, die wiederum auf Eigenschaften in der Settings
Klasse zugreifen und eine Eigenschaft geänderte Benachrichtigung auslösen, wenn sich der Einstellungswert geändert hat. Informationen dazu, wie die mobile eShopOnContainers-App Ansichtsmodelle erstellt und ansichten ordnet, finden Sie unter "Automatisches Erstellen eines Ansichtsmodells mit einem Ansichtsmodell-Locator".
Das folgende Codebeispiel zeigt das Entry
Steuerelement aus dem SettingsView
, mit dem der Benutzer eine Basisendpunkt-URL für die containerisierten Microservices eingeben kann:
<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 wird, wird die UpdateEndpoint
Methode aufgerufen, vorausgesetzt, der angegebene Wert ist gültig, und die Benachrichtigung über Eigenschaftsänderung 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 sie auf plattformspezifischen Speicher beibehalten wird.
Wenn die SettingsView
Methode in der Klasse ausgeführt wird, InitializeAsync
zu der SettingsViewModel
navigiert wird. 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. Der Zugriff auf die UrlBase
Eigenschaft bewirkt, dass die Xam.Plugins.Settings-Bibliothek den Einstellungswert aus plattformspezifischem Speicher abruft. Informationen dazu, wie die Methode aufgerufen wird, finden Sie unter Übergeben von Parametern während der InitializeAsync
Navigation.
Dieser Mechanismus stellt sicher, dass benutzer, wenn ein Benutzer zu SettingsView navigiert, von plattformspezifischem Speicher abgerufen und durch Datenbindung dargestellt werden. Wenn der Benutzer dann die Einstellungswerte ändert, stellt die Datenbindung sicher, dass sie sofort wieder auf plattformspezifischen Speicher zurückgehalten 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.