ASP.NET Core - Lendo informações de configuração em outro projeto


  Hoje veremos como ler informações de configuração do arquivo appsettings.json a partir de outro projeto.

Quando você criar um projeto ASP.NET Core em camadas geralmente vai precisar ler informações do arquivo de configuração appsettings.json a partir de um projeto Class Library.

Existem muitas abordagens que podemos usar para realizar esta tarefa e hoje eu vou apresentar uma alternativa simples e rápida onde vamos usar uma classe estática que não precisa de uma instância e usar uma implementação Singleton segura para threads.

Assim suponha que você tenha uma solução contendo os seguintes projetos:

  1. BlzCrud.App  - Projeto Blazor Server que é a camada de apresentação usando componentes Razor;
  2. BlzCrud.application  - Projeto Class Library contém os serviços;
  3. BlzCrud.Domain - Projeto Class Library que contém as entidades do domínio;
  4. BlzCrud.Infra - Projeto Class Library que contém a lógica da camada de acesso aos dados;

No projeto BlzCrud.App você tem o arquivo appsettings.json contendo a string de conexão :

{
"ConnectionStrings": {
  
"DefaultConnection": "Data Source=.;Initial Catalog=CadastroDB;Integrated Security=True"
},
  
"Logging": {
     
"LogLevel": {
         
"Default": "Information",
         
"Microsoft.AspNetCore": "Warning"
       }
    },
"AllowedHosts": "*"
}

E você precisa acessar e ler esta string de conexão a partir do projeto BlzCrud.Infra.

Para isso, neste projeto, crie uma pasta chamada AppConfig no projeto e nesta pasta crie a classe AppSettings usando o código abaixo:

using Microsoft.Extensions.Configuration;
namespace BlzCrud.Infra.AppConfig;
public sealed class AppSettings
{
    private static AppSettings _instance = null;
    private static readonly object padlock = new object();
    public readonly string _connectionString = string.Empty;
    private AppSettings()
    {
        var configuration = new ConfigurationBuilder()
            .AddJsonFile(Path.Combine(Directory.GetCurrentDirectory(),
                                              "appsettings.json"), optional: false)
            .AddJsonFile(Path.Combine(Directory.GetCurrentDirectory(), 
                                               "appsettings.Development.json"), optional: false)
            .Build();
        _connectionString = configuration.GetSection("ConnectionStrings")
                                                      .GetSection("DefaultConnection").Value;
    }
    public static AppSettings Instance
    {
        get
        {
            lock (padlock)
            {
                if (_instance == null)
                {
                    _instance = new AppSettings();
                }
                return _instance;
            }
        }
    }
    public string ConnectionString
    {
        get => _connectionString;
    }
}

Este código utiliza os seguintes pacotes nuget:

Para obter a informação do arquivo appsettings.json basta usa o código a seguir:

string connectionString = AppSettings.Instance.ConnectionString;

E estamos conversados...

"O que, passando, se põe em questão alheia, é como aquele que pega um cão pelas orelhas."
Provérbios 26:17

Referências:


José Carlos Macoratti