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:
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:
NET - Unit of Work - Padrão Unidade de ...