Em aplicativos .Net, muitas vezes vemos que os projetos gerados pelo VS para nós conterão arquivos como App.config ou Web.config. Este arquivo é o que chamamos de arquivo de configuração do aplicativo. Este arquivo descreve algumas informações relacionadas à nossa aplicação, como conexão com o banco de dados, modo de autenticação, etc. No programa, podemos usar a propriedade ConnectionStrings do ConfigurationManager para obter convenientemente as informações da string de conexão do banco de dados no arquivo de configuração.
Mas às vezes precisamos estendê-lo e adicionar alguns elementos personalizados em vez de apenas usar a configuração padrão. Por exemplo, podemos precisar carregar dinamicamente uma classe e inicializá-la quando o programa for iniciado, mas essa classe ou dados de inicialização são desconhecidos para nós durante o design do programa. Acredito que todo mundo já encontrou esse problema, então não vou explicar muito aqui. A melhor maneira é escrever essas coisas que podem mudar no arquivo de configuração. Quando tiver certeza, você só precisa modificar o arquivo de configuração, em vez de levar 30 segundos para abrir o VS quando o produto estiver prestes a ficar online. o código.
Adicionar alguns elementos personalizados a um arquivo de configuração é fácil e requer apenas duas etapas:
1. Registre o nome do nó que deseja definir e o manipulador da seção de configuração usado para processar o nó no nó <configSections>. O código é o seguinte:
1 <configSections>2 <section name="dbFactory" type="DbFactory.Configuration.DbFactorySection,DbFactory.Configuration"/>3 </configSections>
2. Adicione nós customizados em locais apropriados. O código é o seguinte:
1 <configSections> 2 <section name="dbFactory" type="DbFactory.Configuration.DbFactorySection,DbFactory.Configuration"/> 3 </configSections> 4 <dbFactory> 5 <default factory="sql"></default> 6 <factorys> 7 <add name="sql" assembly="Hello.Data" class="SqlDbFactory" /> 8 <add name="oracle" assembly="Hello.Data" class="OracleDbFactory" /> 9 </ fábricas>10 </dbFactory>
O nó customizado foi adicionado, mas como obtemos essas informações de configuração no programa? Acredito que muitos de vocês são especialistas em brincar com XML. Se você usa algumas classes em System. Este é realmente o caso. O mestre é realmente um mestre. Eu realmente o admiro. Mas se for implementado dessa forma, não há realmente necessidade de escrever esta postagem no blog.
A estrutura .Net implementa muitas APIs de configuração para simplificar nossas operações em arquivos de configuração. Na primeira etapa, mencionamos o manipulador da seção de configuração, que é usado para ler e gravar as informações de nosso nó customizado. Então, como implementamos um manipulador de seção de configuração? Primeiro, vamos dar uma olhada nas classes e conceitos relacionados.
ConfigurationSection: os nós customizados devem herdar esta classe para fornecer processamento customizado e acesso programático à seção de configuração customizada.
ConfigurationElement: representa um elemento dentro do arquivo de configuração.
ConfigurationElementCollection: representa um elemento de configuração que contém uma coleção de elementos filhos.
Com essas classes, podemos resumir que existem dois tipos de elementos de configuração no arquivo de configuração.
Primeiro, um único elemento de configuração é um elemento que herda de ConfigurationElement e não contém nenhum elemento filho.
Segundo, o elemento de configuração da coleção é um elemento herdado de ConfigurationElementCollection, que contém uma coleção de elementos filhos.
Os conceitos são frequentemente relativamente abstratos. Para compreender essas coisas, devemos explicá-los em detalhes com base nos exemplos que demos acima.
Existem dois elementos na seção de configuração <dbFactory>, ou seja, <default> e <factorys>, e o elemento <factorys> contém dois subelementos. Então aqui <default> é um único elemento de configuração e <factorys> é um elemento de configuração de coleção. Precisamos implementar as classes e suas propriedades correspondentes a esses elementos respectivamente.
Elemento <default>: é um elemento de tipo único, então herdamos ConfigurationElement. Há um atributo de fábrica neste elemento, então o definimos de acordo na classe. O código é o seguinte:
código
classe pública DefaultElement: ConfigurationElement { [ConfigurationProperty("factory")] public string Factory { get { return this["factory"] como string } set { this["factory"] = valor;
Nota: Precisamos registrar o atributo ConfigurationProperty da propriedade acima da definição da propriedade.
<factorys> elementos filhos:
código
classe pública FactoryElement: ConfigurationElement { [ConfigurationProperty( "nome" )] public string Nome { get { return this["nome"] como string } set { this["nome"] = valor; )] public string Assembly { get { return this["assembly"] como string } set { this["assembly"] = value; classe"] como string; } set { this["class"] = valor; } } }
O elemento <factorys> é um elemento de coleção e herda ConfigurationElementCollection.
código
classe pública FactoryElements: ConfigurationElementCollection {substituição protegida ConfigurationElement CreateNewElement() {retornar novo FactoryElement();} objeto de substituição protegida GetElementKey (elemento ConfigurationElement) {retornar ((FactoryElement)element).Name; retorne BaseGet(nome) como FactoryElement;
A classe ConfigurationElementCollection é uma classe abstrata e você deve implementar explicitamente seu método CreateNewElement e seu método GetElementKey.
Nó <dbFactory>, herdado de ConfigurationSection
código
classe pública DbFactorySection: ConfigurationSection { [ConfigurationProperty("default")] public DefaultElement DefaultFactory { get { return this["default"] como DefaultElement } set { this["default"] = valor; )] public FactoryElements Factorys { get { return this["factorys"] como FactoryElements } set { this["factorys"] = valor;
O manipulador da seção de configuração foi finalmente concluído. Coloque essas quatro classes no mesmo diretório do projeto e compile-as em uma DLL. Onde você precisar obter informações de configuração, faça referência a esta DLL e use DbFactorySection section = ConfigurationManager.GetSection( "dbFactory" ) como DbFactorySection É a seção que você deseja?