web-dev-qa-db-fra.com

ConfigurationManager et AppSettings dans l'application universelle (UWP)

Je souhaite stocker une clé API dans un fichier de configuration sans l'enregistrer dans le contrôle de source et lire les données dans mon application UWP.

Une solution courante consiste à stocker la clé dans un fichier .config (tel que app.config ou web.config) et à y accéder de la manière suivante:

var apiKey = ConfigurationManager.AppSettings.Get("apiKey");

Je travaille sur une application Windows universelle (UWP) et je ne peux pas accéder à l'espace de noms System.Configuration contenant ConfigurationManager.

Comment puis-je accéder à AppSettings dans l'application UWP? Quel est le meilleur moyen d'accéder aux données de configuration dans une application UWP?

19
Amadeusz Wieczorek

Dans mon cas d'utilisation spécifique, je devais utiliser un fichier externe qui n'est pas suivi par le contrôle de source. Il existe deux manières d'accéder aux données à partir de fichiers de ressources ou de configuration.

L'une consiste à ouvrir et à analyser un fichier de configuration. Avec un fichier sample.txt avec Action de compilationContent (Copier dans le répertoire de sortie n'a pas d'importance), nous pouvons le lire avec

var uri = new System.Uri("ms-appx:///sample.txt");
var sampleFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uri);

ou

var packageFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
var sampleFile = await packageFolder.GetFileAsync("sample.txt");

suivi par 

var contents = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);

Alternativement, nous pouvons utiliser Resources. Ajoutez un nouvel élément de ressource au projet, appelé resourcesFile.resw. Pour accéder aux données, utilisez:

var resources = new Windows.ApplicationModel.Resources.ResourceLoader("resourcesFile");
var token = resources.GetString("secret");

J'ai écrit une réponse plus détaillée dans un article de blog Fichiers de ressources personnalisés dans UWP

13
Amadeusz Wieczorek

Je pense que ce que vous appelez "ApiKey" est la clé statique qu'une API vous donne pour générer un jeton d'accès. Si tel est le cas, le meilleur moyen d'y parvenir est peut-être de créer une classe statique à partir du contrôle source avec cette valeur à l'intérieur, quelque chose comme ceci:

public static class MyCredentials
{
    public static string MyApiKey = "apiKey";
}

Ensuite, vous accédez facilement à cette valeur à partir de votre code:

var myApiKey = MyCredentials.MyApiKey;

Si vous souhaitez plutôt stocker les valeurs dans un fichier texte, vous devrez l'écrire/le lire manuellement à l'aide des classes StorageFile et FileIO.

Au lieu de cela, si "ApiKey" signifie le jeton d'accès dynamique, la meilleure solution consiste à utiliser ApplicationDataContainer comme le dit stratever.

1
Gabriel Ferreiro