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>
È stato utile?

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()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top