Condividi tramite


Gestione delle impostazioni dell'applicazione

Suggerimento

Questo contenuto è un estratto dell'eBook, Enterprise Application Patterns Using .NETMAUI, disponibile in .NET Docs o come PDF scaricabile gratuitamente che può essere letto offline.

Criteri di applicazione aziendale con .NET MAUI Anteprima copertina e-book.

Le impostazioni consentono la separazione dei dati che configurano il comportamento di un'app dal codice, consentendo la modifica del comportamento senza ricompilare l'app. Esistono due tipi di impostazioni: impostazioni dell'app e impostazioni utente.

Le impostazioni dell'app sono dati creati e gestiti da un'app. Può includere dati come gli endpoint di servizio Web fissi, le chiavi API e lo stato di runtime. Le impostazioni dell'app sono associate alle funzionalità di base e sono significative solo per l'app.

Le impostazioni utente sono le impostazioni personalizzabili di un'app che influiscono sul comportamento dell'app e non richiedono modifiche frequenti. Ad esempio, un'app potrebbe consentire all'utente di specificare dove recuperare i dati e come visualizzarli sullo schermo.

Creazione di un'interfaccia delle impostazioni

Anche se il gestore delle preferenze può essere usato direttamente nell'applicazione, presenta lo svantaggio di rendere l'applicazione strettamente associata all'implementazione del gestore delle preferenze. Questo accoppiamento significa che la creazione di unit test o l'estensione della funzionalità di gestione delle preferenze sarà limitata perché l'applicazione non avrà un modo diretto per intercettare il comportamento. Per risolvere questo problema, è possibile creare un'interfaccia e farla funzionare come proxy per la gestione delle preferenze. L'interfaccia ci permetterà di fornire un'implementazione adatta alle nostre esigenze. Ad esempio, quando si scrive un unit test, è possibile impostare impostazioni specifiche e l'interfaccia consente di impostare in modo semplice questi dati per il test. L'esempio di codice seguente mostra l'interfaccia ISettingsService nell'app multipiattaforma 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; }
}

Aggiunta di impostazioni

.NET MAUI include un gestore delle preferenze che consente di archiviare le impostazioni di runtime per un utente. Questa funzionalità può essere accessibile da qualsiasi posizione all'interno dell'applicazione usando la classe Microsoft.Maui.Storage.Preferences. Il gestore delle preferenze offre un approccio coerente, indipendente dai tipi e multipiattaforma per rendere persistenti e recuperare le impostazioni dell'app e degli utenti, usando al tempo stesso la gestione delle impostazioni native fornita da ogni piattaforma. Inoltre, è semplice usare il data binding per accedere ai dati delle impostazioni esposte dalla libreria. Per altre informazioni, vedere le Preferenze nel Centro per sviluppatori Microsoft.

Suggerimento

Le preferenze sono destinate all'archiviazione di dati relativamente piccoli. Se è necessario archiviare dati più grandi o più complessi, è consigliabile usare un database locale o un file system per archiviare i dati.

L'applicazione userà la Preferences classe deve implementare l'ISettingsServiceinterfaccia. Il codice seguente mostra come l'app SettingsService multipiattaforma eShop implementa le AuthTokenAccess proprietà e UseMocks :

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

Ogni impostazione è costituita da una chiave privata, da un valore predefinito privato e da una proprietà pubblica. La chiave è sempre una stringa const che definisce un nome univoco, con il valore predefinito per l'impostazione come valore statico di sola lettura o costante del tipo richiesto. Se viene recuperata un'impostazione non impostata, fornire un valore predefinito garantisce che sia disponibile un valore valido. Questa implementazione del servizio può essere fornita tramite l'inserimento delle dipendenze all'applicazione per l'uso nei modelli di visualizzazione o in altri servizi in tutta l'applicazione.

Data binding alle impostazioni utente

Nell'app multipiattaforma eShop espone SettingsView più impostazioni che l'utente può configurare in fase di esecuzione. Queste impostazioni includono la configurazione che prevedono se l'app deve recuperare i dati dai microservizi distribuiti come contenitori Docker o se l'app deve recuperare dati da servizi fittizi che non richiedono una connessione Internet. Quando si recuperano dati da microservizi in contenitori, è necessario specificare un URL dell'endpoint di base per i microservizi. L'immagine seguente mostra SettingsView quando l'utente ha scelto di recuperare dati da microservizi in contenitori.

Impostazioni utente esposte dall'app multipiattaforma eShop.

Il data binding può essere usato per recuperare e impostare le impostazioni esposte dall'interfaccia ISettingService. Questo risultato viene ottenuto dai controlli sull'associazione di visualizzazione per visualizzare le proprietà del modello che a loro volta accedono alle proprietà nell'interfaccia ISettingService e generano una notifica di modifica della proprietà se il valore è stato modificato.

L'esempio di codice seguente illustra il controllo Entry del SettingsView che consente all'utente di immettere un URL dell'endpoint di identità di base per i microservizi in contenitori:

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

Questo controllo Entry viene associato alla proprietà IdentityEndpoint della classe SettingsViewModel utilizzando un'associazione bidirezionale. Nell'esempio di codice riportato di seguito viene illustrata la proprietà IdentityEndpoint:

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

Quando la proprietà IdentityEndpoint è impostata, viene chiamato il metodo UpdateIdentityEndpoint, purché il valore fornito sia valido. L'esempio di codice seguente illustra il metodo UpdateIdentityEndpoint:

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

Questo metodo aggiorna la proprietà IdentityEndpointBase nell'implementazione dell'interfaccia ISettingService con il valore dell'URL dell'endpoint di base immesso dall'utente. Se la classe SettingsService viene fornita come implementazione per _settingsService, il valore verrà mantenuto nell'archiviazione specifica della piattaforma.

Riepilogo

Le impostazioni consentono la separazione dei dati che configurano il comportamento di un'app dal codice, consentendo la modifica del comportamento senza ricompilare l'app. Le impostazioni dell'app sono dati creati e gestiti da un'app e le impostazioni utente sono le impostazioni personalizzabili di un'app che influiscono sul comportamento dell'app e non richiedono modifiche frequenti.

La classe Microsoft.Maui.Storage.Preferences offre un approccio coerente, indipendente dai tipi e multipiattaforma per rendere persistenti e recuperare le impostazioni dell'app e dell'utente.