Freigeben über


Verwaltung von Anwendungseinstellungen

Tipp

Diese Inhalte sind ein Auszug aus dem eBook „Enterprise Application Patterns Using .NET MAUI“, verfügbar unter .NET Docs oder als kostenlos herunterladbare PDF-Datei, die offline gelesen werden kann.

Enterprise Application Patterns Using .NET MAUI (Miniaturansicht eBook-Deckblatt).

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 Kernfunktionen gebunden und nur für diese App von Bedeutung.

Benutzereinstellungen sind die anpassbaren Einstellungen einer App, die sich auf das Verhalten der App auswirken und keine häufige Neuanpassung erfordern. In einer App kann der Benutzer beispielsweise angeben, wo Daten abgerufen werden sollen und wie diese auf dem Bildschirm angezeigt werden sollen.

Erstellen einer Einstellungsschnittstelle

Zwar kann der Einstellungs-Manager direkt in Ihrer Anwendung verwendet werden, dies hat aber den Nachteil, dass Ihre Anwendung eng an die Implementierung des Einstellungs-Managers gekoppelt ist. Diese Kopplung bedeutet, dass das Erstellen von Komponententests oder das Erweitern der Funktionalität der Einstellungsverwaltung eingeschränkt ist, da Ihre Anwendung keine direkte Möglichkeit hat, das Verhalten abzufangen. Um diesem Problem gerecht zu werden, kann eine Schnittstelle erstellt werden, die als Proxy für die Einstellungsverwaltung fungiert. Die Schnittstelle ermöglicht es, eine Implementierung bereitzustellen, die Ihren Anforderungen entspricht. Wenn Sie beispielsweise einen Komponententest schreiben, möchten Sie möglicherweise bestimmte Einstellungen festlegen, und die Schnittstelle bietet Ihnen eine einfache Möglichkeit, diese Daten für den Test konsistent festzulegen. Das folgende Codebeispiel zeigt die ISettingsService-Schnittstelle in der multiplattformfähigen eShop-App:

namespace eShop.Services.Settings;

public interface ISettingsService
{
    string AuthAccessToken { get; set; }
    string AuthIdToken { get; set; }
    bool UseMocks { get; set; }
    string IdentityEndpointBase { get; set; }
    string GatewayShoppingEndpointBase { get; set; }
    string GatewayMarketingEndpointBase { get; set; }
    bool UseFakeLocation { get; set; }
    string Latitude { get; set; }
    string Longitude { get; set; }
    bool AllowGpsLocation { get; set; }
}

Hinzufügen von Einstellungen

.NET MAUI enthält einen Einstellungs-Manager, der eine Möglichkeit zum Speichern von Laufzeiteinstellungen für einen Benutzer bietet. Auf dieses Feature kann über die Microsoft.Maui.Storage.Preferences-Klasse an jeder beliebigen Stelle Ihrer Anwendung zugegriffen werden. Der Einstellungs-Manager bietet einen konsistenten, typsicheren, plattformübergreifenden Ansatz zum persistenten Speichern und Abrufen von App- und Benutzereinstellungen unter Verwendung der nativen 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. Weitere Informationen finden Sie unter Einstellungen in Microsoft Developer Center.

Tipp

Die Einstellungen dienen zum Speichern relativ kleiner Datenmengen. Wenn Sie größere oder komplexere Daten speichern müssen, sollten Sie zum Speichern der Daten eine lokale Datenbank oder ein Dateisystem verwenden.

Unsere Anwendung verwendet die Preferences-Klasse, um die ISettingsService-Schnittstelle zu implementieren. Der folgende Code zeigt, wie SettingsService der multiplattformfähigen eShop-App die Eigenschaften AuthTokenAccess und UseMocks implementiert:

public sealed class SettingsService : ISettingsService
{
    private const string AccessToken = "access_token";
    private const string AccessTokenDefault = string.Empty;

    private const string IdUseMocks = "use_mocks";
    private const bool UseMocksDefault = true;

    public string AuthAccessToken
    {
        get => Preferences.Get(AccessToken, AccessTokenDefault);
        set => Preferences.Set(AccessToken, value);
    }

    public bool UseMocks
    {
        get => Preferences.Get(IdUseMocks, UseMocksDefault);
        set => Preferences.Set(IdUseMocks, value);
    }
}

Jede Einstellung besteht aus einem privaten Schlüssel, einem privaten Standardwert und einer öffentlichen Eigenschaft. Der Schlüssel ist immer eine konstante Zeichenfolge, die einen eindeutigen Namen definiert, wobei der Standardwert für die Einstellung ein statischer schreibgeschützter oder konstanter 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. Diese Dienstimplementierung kann über Dependency Injection für unsere Anwendung bereitgestellt werden, um sie in Ansichtsmodellen oder anderen Diensten in der gesamten Anwendung zu verwenden.

Datenbindung an Benutzereinstellungen

In der multiplattformfähigen eShop-App stellt SettingsView mehrere Einstellungen zur Verfügung, die Benutzer und Benutzerinnen zur Laufzeit konfigurieren können. Diese Einstellungen umfassen das Zulassen der Konfiguration, ob die App Daten aus als Docker-Container bereitgestellten Microservices abrufen soll oder ob die App Daten von Pseudodiensten abrufen soll, die keine Internetverbindung erfordern. Beim Abrufen von Daten aus containerisierten Microservices muss eine Basisendpunkt-URL für die Microservices angegeben werden. Die folgende Abbildung zeigt die SettingsView, wenn der Benutzer Daten aus containerisierten Microservices abrufen möchte.

Benutzereinstellungen, die von der multiplattformfähigten eShop-App verfügbar gemacht werden

Datenbindung kann zum Abrufen und Festlegen von Einstellungen verwendet werden, die von der ISettingService-Schnittstelle verfügbar gemacht werden. Dies wird durch Steuerelemente für die Ansichtsbindung erreicht, um Modelleigenschaften anzuzeigen, die wiederum auf Eigenschaften in der ISettingService-Schnittstelle zugreifen und eine Eigenschaftsänderungsbenachrichtigung auslösen, wenn sich der Wert geändert hat.

Im folgenden Codebeispiel wird das Entry-Steuerelement aus SettingsView gezeigt, mit dem der Benutzer eine Basisidentitätsendpunkt-URL für die containerisierten Microservices eingeben kann:

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

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

private readonly ISettingsService _settingsService;

private string _identityEndpoint;

public SettingsViewModel(
    ILocationService locationService, IAppEnvironmentService appEnvironmentService,
    IDialogService dialogService, INavigationService navigationService, ISettingsService settingsService)
    : base(dialogService, navigationService, settingsService)
{
    _settingsService = settingsService;

    _identityEndpoint = _settingsService.IdentityEndpointBase;
}

public string IdentityEndpoint
{
    get => _identityEndpoint;
    set
    {
        SetProperty(ref _identityEndpoint, value);

        if (!string.IsNullOrWhiteSpace(value))
        {
            UpdateIdentityEndpoint();
        }
    }
}

Wenn die IdentityEndpoint-Eigenschaft festgelegt ist, wird die UpdateIdentityEndpoint-Methode aufgerufen, sofern der angegebene Wert gültig ist. Die UpdateIdentityEndpoint-Methode wird in folgendem Codebeispiel veranschaulicht:

private void UpdateIdentityEndpoint()
{
    _settingsService.IdentityEndpointBase = _identityEndpoint;
}

Diese Methode aktualisiert die IdentityEndpointBase-Eigenschaft in der ISettingService-Schnittstellenimplementierung mit dem vom Benutzer eingegebenen Wert für die Basisendpunkt-URL. Wenn die SettingsService-Klasse als Implementierung für _settingsServicebereitgestellt wird, bleibt der Wert im plattformspezifischen Speicher erhalten.

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 von einer App erstellt und verwaltet werden, und Benutzereinstellungen sind die anpassbaren Einstellungen einer App, die sich auf das Verhalten der App auswirken und keine häufige erneute Anpassung erfordern.

Die Microsoft.Maui.Storage.Preferences-Klasse bietet einen konsistenten, typsicheren, plattformübergreifenden Ansatz zum Beibehalten und Abrufen von App- und Benutzereinstellungen.