Apq.Cfg integrates seamlessly with ASP.NET Core dependency injection.
var builder = WebApplication.CreateBuilder(args);
// Register Apq.Cfg
builder.Services.AddApqCfg(cfg => cfg
.AddJson("config.json", level: 0, writeable: false)
.AddEnvironmentVariables(level: 1, prefix: "APP_"));
var app = builder.Build();
public class MyService
{
private readonly ICfgRoot _cfg;
public MyService(ICfgRoot cfg)
{
_cfg = cfg;
}
public string GetAppName()
{
return _cfg.Get("App:Name") ?? "DefaultApp";
}
}
public class DatabaseOptions
{
public string Host { get; set; } = "localhost";
public int Port { get; set; } = 5432;
public string Name { get; set; } = "";
}
builder.Services.AddApqCfg(cfg => cfg
.AddJson("config.json", level: 0, writeable: false));
builder.Services.ConfigureApqCfg<DatabaseOptions>("Database");
public class DatabaseService
{
private readonly DatabaseOptions _options;
public DatabaseService(IOptions<DatabaseOptions> options)
{
_options = options.Value;
}
public string GetConnectionString()
{
return $"Host={_options.Host};Port={_options.Port};Database={_options.Name}";
}
}
// Apq.Cfg also registers IConfiguration
public class LegacyService
{
private readonly IConfiguration _config;
public LegacyService(IConfiguration config)
{
_config = config;
}
}
For request-scoped configuration:
builder.Services.AddScoped<RequestConfig>(sp =>
{
var cfg = sp.GetRequiredService<ICfgRoot>();
return new RequestConfig
{
Timeout = cfg.Get<int>("Request:Timeout")
};
});