Post - Lendo String de Conexão de Arquivo de Configurações JSON em Projeto ASP.NET Core

Photo by Alexander Andrews on Unsplash

Estou trabalhando em um projeto de aprendizado usando ASP.NET Core e Dapper. Recentemente fiz um post relacionado aqui e no final coloquei link para o projeto.

Encontrei uma grande dificuldade para ler a configuração da string de conexão com o banco de dados do arquivo JSON. Todas as buscas e documentação que eu lia eram bastante vagos (ou eu que não estava entendendo mesmo) sobre como fazer a leitura.

Neste post vou colocar os passos que dei para que o projeto ficasse operacional, lendo as configurações corretamente.

Em um projeto ASP.NET Core por padrão as configurações são armazenadas em um arquivo JSON. Embora seja possível usar outras formas de armazenamento, este é o mais comum. O exemplo abaixo inclui uma seção para a string de conexão identificada pela chave "ConnectionStrings".

A parte mais importante a observar é o caminho completo para a chave. No meu caso eu estava passando incorretamente o caminho e isso retornava sempre o valor nulo. Para a configuração deste exemplo, o caminho completo deve ser: "Logging:ConnectionStrings:Schedules".

{      "Logging":{         "IncludeScopes":false,       "Debug":{            "LogLevel":{               "Default":"Warning"          }       },       "Console":{            "LogLevel":{               "Default":"Warning"          }       },       "ConnectionStrings":{            "Schedules":"Server=(local)\\sqlexpress2014;Database=schedules;Trusted_Connection=True;"       }    } }

O lugar correto no projeto para fazer a leitura do arquivo de configuração é na classe Startup.cs, que faz a inicialização do projeto. Uma abordagem que pode ser usada é criar uma classe estática que disponibilize uma propriedade para recuperar a string de conexão.

Neste projeto eu criei uma classe chamada ConfigHelper que tem a propriedade ConnectionString.

namespace agenda.Classes { public static class ConfigHelper { public static string ConnectionString; } }

Na classe Startup.cs, responsável pela inicialização do serviço, foram introduzidas as seguintes mudanças:

Uma propriedade IConfiguration para ser possível acessar métodos que possam ler as configurações do arquivo JSON.

Em seguida, no construtor, esta propriedade é inicializada recebendo a configuração que é passada por parâmetro no construtor.

E por fim, no método ConfigureServices, é feita a leitura da seção de configuração onde está a string de conexão e passada para a classe estática que foi criada com o propósito de auxiliar a leitura da configuração.

public class Startup { public IConfiguration Configuration { get; } public Startup(IConfiguration configuration) { Configuration = configuration; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc(); ConfigHelper.ConnectionString = Configuration["Logging:ConnectionStrings:Schedules"]; services.AddSingleton(Configuration); } }

Com a estrutura pronta para a leitura das configurações foi necessário apenas incluir a chamada para a classe ConfigHelper no método que faz a leitura dos dados no banco de dados e executar o método Query do Dapper.

List<Schedule> GetLastHundreds() { string sql = "select top 100 * from users_schedules order by id desc"; using(var conn = new SqlConnection(ConfigHelper.ConnectionString)) { var lst = conn.Query<Schedule>(sql).ToList(); return lst; } }

Acredito que uma vez desvendado o mistério de como ler as configurações se tem uma base para que as demais operações se tornem mais diretas.

Este projeto de aprendizado do asp.net core e Dapper está evoluindo, se quiser, acompanhe no Git Hub e até a próxima.

Links

Dapper Getting started

Create a Web API with ASP.NET Core and Visual Studio

Projeto Agenda no GitHub