Conservare un insieme di valori in un file di configurazione
-
22-08-2019 - |
Domanda
In un 3,5 servizio .NET (Windows), vorrei memorizzare una piccola collezione di valori nel file di configurazione. Fondamentalmente, ho bisogno di consentire agli amministratori di aggiungere e rimuovere valori da questa piccola collezione. Di cosa ho bisogno di aggiungere al file di configurazione per memorizzare un insieme di valori piccoli, e come posso leggere la collezione in C #?
Per chiarire, la collezione sto cercando è un dato come questo:
<Illegal Characters>
<CustomCollection value="?"/>
<CustomCollection value="#"/>
<CustomCollection value=","/>
</Illegal Characters>
Soluzione
C'è un buon articolo sulla creazione di un gestore della sezione di configurazione personalizzata che carica i valori come un elenco qui .
In sostanza del vostro IConfigurationSectionHandler
Crea metodo dovrebbe essere simile a questo:
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;
}
Altri suggerimenti
In alternativa, è possibile memorizzare una singola stringa di caratteri illegali come un'espressione regolare nel file di configurazione. In questo modo non c'è bisogno di scorrere i personaggi per verificare la presenza di loro viene utilizzato in una data stringa - si potrebbe fare un confronto basato sul regex. Potrebbe risparmiare un po 'di cpu e la complessità.
Naturalmente, è più facile da usare singoli nodi XML se gli amministratori stanno andando a modificare direttamente il file. Ma se stanno cambiando l'elenco dei caratteri tramite l'applicazione stessa, una regex potrebbe essere buono.
Se il numero di valori è piccolo ei nomi ad essi associati sono fissi, si dovrebbe essere in grado di memorizzarli nella sezione di configurazione appSettings e fare riferimento utilizzando il ConfigurationManager .AppSettings raccolta. Questo funziona abbastanza bene per coppie chiave-valore standard. Se i dati sono più complesso di quello, si potrebbe desiderare di definire la propria sezione di configurazione e di un associato ConfigurationSectionHandler per analizzare i dati in qualsiasi oggetto personalizzato che si desidera. Potrai anche probabilmente desidera implementare un FileSystemWatcher per rilevare le modifiche al file di configurazione e aggiornare la configurazione dell'applicazione in esecuzione a meno che non è accettabile per avviare / arrestare il servizio al fine di ottenere la nuova configurazione applicata.
io descrivere il modo in VB.NET, perché sono sicuro che il C # modo è molto simile o lo stesso in alcuni casi. Aprire il file settings.settings sotto Il mio progetto in Esplora soluzioni. Aggiungere le impostazioni desiderate, ad esempio "OutputPath". Poi, nel codice, fare riferimento con
variable = My.Settings.OutputPath
' If a user modifiable setting, you can use:
My.Settings.OutputPath = variable
My.Settings.Save()