Condividi tramite


Gestione della configurazione

Nota

Questo eBook è stato pubblicato nella primavera del 2017 e non è stato aggiornato da allora. C'è molto nel libro che rimane prezioso, ma alcuni dei materiali sono obsoleti.

Impostazioni consentire la separazione dei dati che configura 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 all'esistenza dell'app e sono significative solo per tale app.

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

Xamarin.Forms include un dizionario permanente che può essere usato per archiviare i dati delle impostazioni. È possibile accedere a questo dizionario usando la Application.Current.Properties proprietà e tutti i dati inseriti in esso vengono salvati quando l'app entra in stato di sospensione e viene ripristinata quando l'app riprende o viene riavviata. Inoltre, la Application classe ha anche un SavePropertiesAsync metodo che consente a un'app di salvare le impostazioni quando necessario. Per altre informazioni su questo dizionario, vedere Dizionario proprietà.

Uno svantaggio nell'archiviazione dei dati usando il Xamarin.Forms dizionario permanente è che non è facile associare dati. Pertanto, l'app per dispositivi mobili eShopOnContainers usa Xam.Plugins. Impostazioni libreria, disponibile da NuGet. Questa libreria offre un approccio coerente, indipendente dai tipi e multipiattaforma per rendere persistenti e recuperare le impostazioni dell'app e degli utenti, usando la gestione delle impostazioni native fornita da ogni piattaforma. Inoltre, è semplice usare il data binding per accedere ai dati delle impostazioni esposte dalla libreria.

Nota

Mentre Xam.Plugin. Impostazioni libreria può archiviare le impostazioni dell'app e dell'utente, non distingue tra i due.

Creazione di una classe Impostazioni

Quando si usa Xam.Plugins. Impostazioni libreria, deve essere creata una singola classe statica che conterrà le impostazioni dell'app e dell'utente richieste dall'app. L'esempio di codice seguente illustra la classe Impostazioni nell'app per dispositivi mobili eShopOnContainers:

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

Impostazioni possono essere letti e scritti tramite ISettings API, fornita da Xam.Plugins. Impostazioni libreria. Questa libreria fornisce un singleton che può essere usato per accedere all'API, CrossSettings.Currente la classe delle impostazioni di un'app deve esporre questo singleton tramite una ISettings proprietà .

Nota

Direttive using per il plug-in. Impostazioni e plug-in. Impostazioni. Gli spazi dei nomi delle astrazioni devono essere aggiunti a una classe che richiede l'accesso a Xam.Plugins. Impostazioni tipi di libreria.

Aggiunta di un'impostazione

Ogni impostazione è costituita da una chiave, un valore predefinito e una proprietà. L'esempio di codice seguente mostra tutti e tre gli elementi per un'impostazione utente che rappresenta l'URL di base per il Servizi online a cui si connette l'app per dispositivi mobili eShopOnContainers:

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

La chiave è sempre una stringa const che definisce il nome della chiave, con il valore predefinito per l'impostazione come valore di sola lettura statico del tipo richiesto. Se viene recuperata un'impostazione non impostata, fornire un valore predefinito garantisce che sia disponibile un valore valido.

La UrlBase proprietà statica usa due metodi dell'API ISettings per leggere o scrivere il valore dell'impostazione. Il ISettings.GetValueOrDefault metodo viene usato per recuperare il valore di un'impostazione dall'archiviazione specifica della piattaforma. Se non viene definito alcun valore per l'impostazione, viene recuperato il relativo valore predefinito. Analogamente, il metodo viene usato per rendere persistente il ISettings.AddOrUpdateValue valore di un'impostazione nell'archiviazione specifica della piattaforma.

Piuttosto che definire un valore predefinito all'interno della Settings classe , la UrlBaseDefault stringa ottiene il relativo valore dalla GlobalSetting classe . L'esempio di codice seguente illustra la proprietà e UpdateEndpoint il BaseEndpoint metodo in questa classe:

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

Ogni volta che viene impostata la BaseEndpoint proprietà, viene chiamato il UpdateEndpoint metodo . Questo metodo aggiorna una serie di proprietà, tutte basate sull'impostazione UrlBase utente fornita dalla Settings classe che rappresentano endpoint diversi a cui si connette l'app per dispositivi mobili eShopOnContainers.

Associazione dati a Impostazioni utente

Nell'app per dispositivi mobili eShopOnContainers espone SettingsView due impostazioni utente. Queste impostazioni consentono la configurazione di 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 sceglie di recuperare dati da microservizi in contenitori, è necessario specificare un URL dell'endpoint di base per i microservizi. La figura 7-1 mostra quando SettingsView l'utente ha scelto di recuperare dati da microservizi in contenitori.

User settings exposed by the eShopOnContainers mobile app

Figura 7-1: Impostazioni utente esposte dall'app per dispositivi mobili eShopOnContainers

Il data binding può essere usato per recuperare e impostare le impostazioni esposte dalla Settings classe . Questo risultato viene ottenuto dai controlli sull'associazione di visualizzazione per visualizzare le proprietà del modello che a loro volta accedono alle proprietà nella Settings classe e generando una notifica di modifica della proprietà se il valore delle impostazioni è stato modificato. Per informazioni su come l'app per dispositivi mobili eShopOnContainers costruisce i modelli di visualizzazione e li associa alle visualizzazioni, vedere Creazione automatica di un modello di visualizzazione con un localizzatore di modelli di visualizzazione.

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

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

Questo Entry controllo viene associato alla Endpoint proprietà della SettingsViewModel classe utilizzando un'associazione bidirezionale. L'esempio di codice seguente illustra la proprietà Endpoint:

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

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

        RaisePropertyChanged(() => Endpoint);  
    }  
}

Quando la Endpoint proprietà viene impostata, viene chiamato il UpdateEndpoint metodo , a condizione che il valore fornito sia valido e venga generata la notifica di modifica della proprietà. L'esempio di codice seguente illustra il metodo UpdateEndpoint:

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

Questo metodo aggiorna la UrlBase proprietà nella Settings classe con il valore dell'URL dell'endpoint di base immesso dall'utente, che ne determina la persistenza nell'archiviazione specifica della piattaforma.

SettingsView Quando si passa a , viene eseguito il InitializeAsync metodo nella SettingsViewModel classe . L'esempio di codice seguente illustra il metodo:

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

Il metodo imposta la Endpoint proprietà sul valore della UrlBase proprietà nella Settings classe . L'accesso alla UrlBase proprietà fa sì che la libreria Xam.Plugins.Impostazioni recuperi il valore delle impostazioni dalla risorsa di archiviazione specifica della piattaforma. Per informazioni sul modo in cui viene richiamato il metodo, vedere Passaggio di parametri durante la InitializeAsync navigazione.

Questo meccanismo garantisce che ogni volta che un utente passa alla Impostazioni View, le impostazioni utente vengono recuperate dalla risorsa di archiviazione specifica della piattaforma e presentate tramite il data binding. Se quindi l'utente modifica i valori delle impostazioni, il data binding garantisce che vengano immediatamente salvati in modo permanente nella risorsa di archiviazione specifica della piattaforma.

Riepilogo

Impostazioni consentire la separazione dei dati che configura 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 una regolazione frequente.

The Xam.Plugins. Impostazioni libreria offre un approccio coerente, indipendente dai tipi e multipiattaforma per rendere persistenti e recuperare le impostazioni di app e utente e il data binding può essere usato per accedere alle impostazioni create con la libreria.