Pergunta

Em um serviço de Net 3.5 (Windows), eu gostaria de armazenar uma pequena coleção de valores no arquivo de configuração. Basicamente, eu preciso para permitir que os administradores para adicionar e remover valores a partir desta pequena coleção. O que eu preciso para adicionar ao arquivo de configuração para armazenar uma coleção de valores pequenos, e como eu posso ler a coleção em C #?

Para esclarecer, a coleção que eu estou procurando é dados como este:

<Illegal Characters>
  <CustomCollection value="?"/>
  <CustomCollection value="#"/>
  <CustomCollection value=","/>
</Illegal Characters>
Foi útil?

Solução

Há um bom artigo sobre a criação de uma configuração manipulador de seção personalizado que carrega os valores como uma lista aqui .

Basicamente seu IConfigurationSectionHandler é Criar método deve ser algo como isto:

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

Outras dicas

Como alternativa, você pode armazenar uma única seqüência de caracteres ilegais como uma expressão regular em seu arquivo de configuração. Dessa forma, você não tem que percorrer os caracteres para verificar se que sejam utilizados em uma determinada string - você poderia fazer uma comparação baseada na regex. Pode economizar um pouco de cpu e complexidade.

É claro, é mais fácil de usar nós XML individuais se os administradores estão indo o arquivo diretamente para edição. Mas se eles estão mudando a lista de caracteres através do próprio aplicativo, um regex pode ser bom.

Se o número de valores é pequena e os nomes associados a eles são fixos, você deve ser capaz de armazená-los na seção de configuração appSettings e referenciá-los usando o ConfigurationManager coleção .AppSettings. Isto irá funcionar muito bem para pares chave-valor padrão. Se os seus dados é mais complexa do que isso, você pode querer definir a sua própria seção de configuração e um associado ConfigurationSectionHandler para analisar os dados em qualquer objeto personalizado que deseja. Você também provavelmente vai querer implementar um FileSystemWatcher para detectar alterações no arquivo de configuração e atualizar a configuração do aplicativo em execução a menos que seja aceitável para iniciar / parar o serviço a fim de obter a nova configuração aplicada.

Eu vou descrever a maneira em VB.NET, porque eu tenho certeza que o # caminho C é muito semelhante ou o mesmo em alguns casos. Abra o arquivo Settings.Settings sob Meu projeto no Solution Explorer. Adicionar nas configurações que você deseja, por exemplo "OutputPath". Em seguida, no código, referenciá-lo com

variable = My.Settings.OutputPath

' If a user modifiable setting, you can use:
My.Settings.OutputPath = variable
My.Settings.Save()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top