Question

Je voudrais stocker dans un service .Net 3.5 (Windows), une petite collection de valeurs dans le fichier de configuration. Au fond, je dois permettre admins d'ajouter et de supprimer des valeurs de cette petite collection. Que dois-je ajouter au fichier de configuration pour stocker une collection de petites valeurs, et comment puis-je lire la collection en C #?

Pour clarifier, la collection Je cherche des données est comme ceci:

<Illegal Characters>
  <CustomCollection value="?"/>
  <CustomCollection value="#"/>
  <CustomCollection value=","/>
</Illegal Characters>
Était-ce utile?

La solution

Il y a un bon article sur la création d'un gestionnaire de section de configuration personnalisée qui charge les valeurs comme une liste ici .

Fondamentalement Créer méthode de votre IConfigurationSectionHandler devrait ressembler à ceci:

public object Create(object parent, object configContext, XmlNode section)
{
    IList<string> illegal = new List<string>();
    XmlNodeList processesNodes= section.SelectNodes("CustomCollection");

    foreach (XmlNode child in processesNodes)
    {
        illegal.Add(child.Attributes["value"].InnerText);
    }
    return illegal;
}

Autres conseils

Comme alternative, vous pouvez stocker une seule chaîne de caractères illégaux comme une expression régulière dans votre fichier de configuration. De cette façon, vous n'avez pas à parcourir les caractères pour vérifier les utilisé dans une chaîne donnée - vous pourriez faire une comparaison sur la base regex. Pourrait sauver un peu de cpu et de la complexité.

Bien sûr, il est plus facile d'utiliser des nœuds XML individuels si les admins vont modifier le fichier directement. Mais s'ils changent la liste des caractères via l'application elle-même, une expression régulière peut être bon.

Si le nombre de valeurs est faible et les noms qui leur sont associés sont fixés, vous devriez être en mesure de les stocker dans la section de configuration appSettings et les référence en utilisant les ConfigurationManager collection .AppSettings. Cela très bien pour les paires standards clé-valeur. Si vos données sont plus complexes que cela, vous voudrez peut-être définir votre propre section de configuration et un associé ConfigurationSectionHandler pour analyser les données dans tout objet personnalisé que vous souhaitez. Vous aurez également probablement envie de mettre en œuvre un FileSystemWatcher pour détecter les modifications du fichier de configuration et mettre à jour la configuration de l'application en cours d'exécution, sauf si il est acceptable pour démarrer / arrêter le service afin d'obtenir la nouvelle configuration appliquée.

Je vais décrire la façon VB.NET, parce que je suis sûr que la voie C # est très similaire ou même dans certains cas. Ouvrez le fichier Settings.settings sous mon projet dans la solution Explorer. Ajouter dans les paramètres que vous souhaitez, par exemple « OutputPath ». Ensuite, dans le code, la référence avec

variable = My.Settings.OutputPath

' If a user modifiable setting, you can use:
My.Settings.OutputPath = variable
My.Settings.Save()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top