Beheer van toepassingsinstellingen
Tip
Deze inhoud is een fragment uit het eBook, Enterprise Application Patterns Using .NET MAUI, beschikbaar op .NET Docs of als een gratis downloadbare PDF die offline kan worden gelezen.
Met instellingen kunnen gegevens worden gescheiden die het gedrag van een app vanuit de code configureren, zodat het gedrag kan worden gewijzigd zonder de app opnieuw te bouwen. Er zijn twee typen instellingen: app-instellingen en gebruikersinstellingen.
App-instellingen zijn gegevens die een app maakt en beheert. Het kan gegevens bevatten, zoals vaste webservice-eindpunten, API-sleutels en runtimestatus. App-instellingen zijn gekoppeld aan kernfunctionaliteit en zijn alleen zinvol voor die app.
Gebruikersinstellingen zijn de aanpasbare instellingen van een app die van invloed zijn op het gedrag van de app en die niet regelmatig opnieuw hoeven te worden aangepast. Met een app kan de gebruiker bijvoorbeeld opgeven waar gegevens moeten worden opgehaald en hoe deze op het scherm moeten worden weergegeven.
Een instellingeninterface maken
Hoewel de voorkeurenbeheerder rechtstreeks in uw toepassing kan worden gebruikt, heeft dit het nadeel dat uw toepassing nauw is gekoppeld aan de implementatie van voorkeurenbeheer. Deze koppeling betekent dat het maken van eenheidstests of het uitbreiden van de functionaliteit van voorkeurenbeheer beperkt is, omdat uw toepassing geen directe manier heeft om het gedrag te onderscheppen. Om dit probleem aan te pakken, kan er een interface worden gemaakt om te werken als proxy voor voorkeurenbeheer. Met de interface kunnen we een implementatie leveren die aansluit bij onze behoeften. Bij het schrijven van een eenheidstest willen we bijvoorbeeld specifieke instellingen instellen en de interface biedt ons een eenvoudige manier om deze gegevens consistent in te stellen voor de test. In het volgende codevoorbeeld ziet u de ISettingsService
interface in de app voor meerdere platforms van eShop:
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; }
}
Instellingen toevoegen
.NET MAUI bevat een voorkeurenbeheerder die een manier biedt om runtime-instellingen voor een gebruiker op te slaan. Deze functie is toegankelijk vanaf elke locatie in uw toepassing met behulp van de Microsoft.Maui.Storage.Preferences
klasse. De voorkeurenbeheerder biedt een consistente, typeveilige, platformoverschrijdende benadering voor het behouden en ophalen van app- en gebruikersinstellingen, terwijl het systeemeigen instellingenbeheer van elk platform wordt gebruikt. Daarnaast is het eenvoudig om gegevensbinding te gebruiken voor toegang tot instellingengegevens die door de bibliotheek worden weergegeven. Zie de voorkeuren in het Microsoft Developer Center voor meer informatie.
Tip
Voorkeuren zijn bedoeld voor het opslaan van relatief kleine gegevens. Als u grotere of complexere gegevens wilt opslaan, kunt u overwegen om een lokale database of bestandssysteem te gebruiken om de gegevens op te slaan.
Onze toepassing gebruikt de Preferences
klasse die nodig is om de ISettingsService
interface te implementeren. In de onderstaande code ziet u hoe de eShop-app SettingsService
met meerdere platforms de AuthTokenAccess
en UseMocks
eigenschappen implementeert:
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);
}
}
Elke instelling bestaat uit een persoonlijke sleutel, een persoonlijke standaardwaarde en een openbare eigenschap. De sleutel is altijd een const-tekenreeks die een unieke naam definieert, waarbij de standaardwaarde voor de instelling een statische alleen-lezen of constante waarde van het vereiste type is. Als u een standaardwaarde opgeeft, zorgt u ervoor dat er een geldige waarde beschikbaar is als een niet-instelinstelling wordt opgehaald. Deze service-implementatie kan worden geleverd via afhankelijkheidsinjectie naar onze toepassing voor gebruik in weergavemodellen of andere services in de hele toepassing.
Gegevensbinding met gebruikersinstellingen
In de eShop-app SettingsView
met meerdere platformen worden meerdere instellingen weergegeven die de gebruiker tijdens runtime kan configureren. Deze instellingen omvatten het toestaan van configuratie van of de app gegevens moet ophalen uit microservices die zijn geïmplementeerd als Docker-containers of dat de app gegevens moet ophalen uit mockservices waarvoor geen internetverbinding is vereist. Bij het ophalen van gegevens uit gecontaineriseerde microservices moet een BASISeindpunt-URL voor de microservices worden opgegeven. In de onderstaande afbeelding ziet u de SettingsView wanneer de gebruiker ervoor heeft gekozen om gegevens op te halen uit in een container geplaatste microservices.
Gegevensbinding kan worden gebruikt om instellingen op te halen en in te stellen die door de ISettingService
interface worden weergegeven. Dit wordt bereikt door besturingselementen op de weergavebinding om modeleigenschappen weer te geven die op hun beurt toegang hebben tot eigenschappen in de ISettingService
interface en een melding over gewijzigde eigenschappen te genereren als de waarde is gewijzigd.
In het volgende codevoorbeeld ziet u het Entry
besturingselement van het SettingsView
besturingselement waarmee de gebruiker een eindpunt-URL voor de basisidentiteit voor de in containers geplaatste microservices kan invoeren:
<Entry Text="{Binding IdentityEndpoint, Mode=TwoWay}" />
Dit Entry
besturingselement wordt gekoppeld aan de IdentityEndpoint
eigenschap van de SettingsViewModel
klasse, met behulp van een binding in twee richtingen. In het volgende codevoorbeeld ziet u de IdentityEndpoint
eigenschap:
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();
}
}
}
Wanneer de IdentityEndpoint
eigenschap is ingesteld, wordt de UpdateIdentityEndpoint
methode aangeroepen, mits de opgegeven waarde geldig is. In het volgende codevoorbeeld ziet u de UpdateIdentityEndpoint
methode:
private void UpdateIdentityEndpoint()
{
_settingsService.IdentityEndpointBase = _identityEndpoint;
}
Met deze methode wordt de IdentityEndpointBase
eigenschap in de ISettingService
interface-implementatie bijgewerkt met de URL-waarde van het basiseindpunt die door de gebruiker is ingevoerd. Als de SettingsService
klasse wordt opgegeven als de implementatie voor _settingsService
, blijft de waarde behouden tot platformspecifieke opslag.
Samenvatting
Met instellingen kunnen gegevens worden gescheiden die het gedrag van een app vanuit de code configureren, zodat het gedrag kan worden gewijzigd zonder de app opnieuw te bouwen. App-instellingen zijn gegevens die een app maakt en beheert, en gebruikersinstellingen zijn de aanpasbare instellingen van een app die van invloed zijn op het gedrag van de app en die niet regelmatig opnieuw hoeven te worden aangepast.
De Microsoft.Maui.Storage.Preferences
klasse biedt een consistente, typeveilige, platformoverschrijdende benadering voor het behouden en ophalen van app- en gebruikersinstellingen.