Como carregar sua configuração do AppSettings no C#

Marcio Nizzola
5 min readOct 21, 2022

--

Como carregar sua configuração do AppSettings no C#

Este artigo é para quem está começando ou para quem ainda utiliza a velha forma de carregar configurações no .NET e ainda não está utilizando o IOPTIONS para carregar suas configurações e utilizá-la via injeção de dependência.

No passado a forma mais comum de se carregar uma variável de configuração era através da chamada:

ConfigurationManager.AppSettings["minhavariavel"]

E as nossas configurações lá no .NET Framework ainda ficaram no arquivo Web.Config, mas os tempos mudaram e no .NET veio uma melhoria:

Padrão IOptions

A Microsoft nas novas versões do .NET recomenda o uso do padrão IOptions, que nos permite carregar configurações via injeção de dependência e assim facilitar o tráfego da mesma em todas as camadas da aplicação.

Eu vejo como maior benefício desta implementação é que usaremos uma classe para armazenar os valores e não precisaremos nos lembrar de como o dado está armazenado no config, podemos utilizar nomes mais significativos e também ter várias classes separadas para diferentes configurações.

Em aplicações complexas cheias de projetos separados, é comum termos que trafegar esta configuração nas mais diversas camadas.

AppSettings

Em toda aplicação .NET Web temos ao criá-la o arquivo AppSettings.json para armazenamento das configurações (antigamente utilizávamos o Web.Config), além das variações AppSettings.Development.json e AppSettings.Production.json e outras variações em função do Environment da aplicação.

Neste arquivo é que devem ser armazenadas as configurações da aplicação.

Por padrão ele já traz quando criado configurações de Logging da aplicação (veja mais na minha outra postagem).

Observação: Quando criamos uma aplicação Console o Visual Studio não cria automaticamente os arquivos, mas podemos criá-los manualmente!

Criando variáveis

Então para testar o conceito, vou criar uma Web Api onde o template já me traz um AppSettings.json, então vou acrescentar algumas variáveis, no nó denominado “AppParameters”.

Criando uma classe para armazenar as variáveis.

Para utilizar esta forma de configuração, é necessário termos uma classe para receber os parâmetros lidos.

Configurando a carga do config

Agora com tudo isso montado, vamos testar o conceito, para isto, vamos no arquivo program.cs.

Teremos apenas que inserir as duas linhas marcadas, o restante faz parte já dos métodos.

Na primeira é obtida a configuração diretamente do “builder”.

Já na segunda inserimos a configuração obtida da seção “AppParameters” diretamente na classe “MyConfigurationClass”, sendo assim, ela ficará armazenada para ser utilizada via injeção de dependência.

Como vou usar então?

Neste modelo de aplicação (Minimal Api) ela será inserida diretamente no construtor, como demonstrado abaixo, mas com uma particularidade, através do objeto IOptions (saiba mais pela documentação da MS).

1 — é obtido o objeto “IOptions” tipado pelo objeto “MyConfigurationClass”.

2 — criamos uma variável para armazenar o config, teremos acesso à todos os valores.

3 — retornamos o objeto somente para ilustrar que ele foi preenchido.

Como ficou funcionando?

Pronto, com isso aprendemos a fazer injeção de dependência das configurações, e você pode colocar em qualquer camada das suas aplicações !

Como assim ?

Utilizando em um Serviço

Vamos criar então uma classe de serviço, nela teremos que injetar a configuração conforme demonstra a figura:

1- é definida a variável config disponível na classe de serviço.

2 — é recebida a configuração via padrão “IOptions” pela injeção de dependência.

3 — passamos para a variável “config” o valor de “options”.

Sendo assim, agora só precisamos criar um endpoint novo e configurar a injeção de dependência do serviço.

Criamos abaixo o endpoint que irá executar a chamada para o serviço

E ao executar, tudo funciona conforme esperado !

E só pra validar a coisa toda, vou trocar a linguagem para testar !

E ao executar novamente, pronto, tudo em inglês !

Detalhe importante

Existe ainda a forma de utilizarmos configurações diferentes para desenvolvimento e produção, pois temos versões do AppSettings diferentes, no projeto template é criado também o appsettings.Development.json, e podemos criar outros, que serão também carregados conforme a configuração presente em sua aplicação.

Você pode adicionar um appsettings.Production.json que irá carregar caso nossas configurações de Environment sejam de Produção !

Para testar o conceito, vamos colocar uma configuração diferente nele mudando os environment da aplicação para “Production”:

Movi a configuração de appsettings.json para appsettings.development.json para que ele fique configurado como “BR”.

Ao executar a nossa aplicação agora, a configuração carregada será de Produção !

E voltando as configurações no launchSettings.json, para Development, temos a aplicação de volta à configuração padrão Develop !

Pronto !

Eu já utilizo esta feature desde o .NET 3.0, portanto você pode aplicar em seus projetos a partir desta versão sem nenhum problema !

Gostou do artigo? clique no ícone👏e também me siga para ver as próximas publicações !!

Referências:

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-6.0

--

--

Marcio Nizzola
Marcio Nizzola

Written by Marcio Nizzola

Microsoft MVP | Software Architect na CI&T | Prof. da Etec Itu | Membro Fundador da Comunidade Itu Developers.

No responses yet