Configuración
Configuration
🌍 Idioma: English | Español
Sistema de configuración por capas para Delphi inspirado en Microsoft.Extensions.Configuration de .NET. Lee ajustes desde ficheros JSON, INI, variables de entorno, diccionarios en memoria o fuentes encadenadas — todo unificado detrás de una única interfaz IConfiguration.
¿Por qué usarlo?
- 📄 Múltiples fuentes — JSON, INI, variables de entorno, en memoria o personalizadas
- 🔗 Con capas y sobreescribibles — las fuentes se encadenan; las últimas sobreescriben a las anteriores
- 🗂️ Claves jerárquicas — usa
:como separador (Database:ConnectionString) - 🔄 Soporte de recarga —
IConfigurationRoot.Reloadrelee todos los proveedores - 🎯 Binder — mapea una sección de configuración directamente a una clase Delphi
Inicio rápido
uses
Daf.Configuration.Builder,
Daf.Configuration.Json,
Daf.Configuration.Env,
Daf.Extensions.Configuration;
var Config := TConfigurationBuilder.Create
.AddJsonFile('appsettings.json')
.AddEnvironmentVariables
.Build;
// Leer un valor
var ConnStr := Config['Database:ConnectionString'];
// Leer una sección
var DbSection := Config.GetSection('Database');
var Host := DbSection['Host'];Proveedores disponibles
| Proveedor | Unidad | Descripción |
|---|---|---|
| Fichero JSON | Daf.Configuration.Json |
appsettings.json, opcional/requerido |
| Fichero INI | Daf.Configuration.Ini |
Formato clásico [Sección]\nClave=Valor |
| Variables de entorno | Daf.Configuration.Env |
Variables del SO, opcionalmente filtradas por prefijo |
| En memoria | Daf.Configuration.Memory |
Diccionario de pares string → string |
| Encadenado | Daf.Configuration.Chained |
Envuelve un IConfiguration existente como fuente |
Binding a objetos
Usa TConfigurationBinder para poblar un objeto Delphi desde una sección de configuración:
uses Daf.Configuration.Binder;
type
TDatabaseOptions = class
public
Host: string;
Port: Integer;
Name: string;
end;
var Opts := TDatabaseOptions.Create;
TConfigurationBinder.Bind(Config.GetSection('Database'), Opts);
// Opts.Host, Opts.Port, Opts.Name quedan pobladosIntegración con Hosting
Con Hosting, configura las fuentes en ConfigureAppConfiguration:
THostBuilder.Create
.ConfigureAppConfiguration(procedure(Ctx: IHostBuilderContext;
Builder: IConfigurationBuilder)
begin
Builder
.AddJsonFile('appsettings.json')
.AddJsonFile('appsettings.' + string(Ctx.Environment.EnvironmentName) + '.json', True)
.AddEnvironmentVariables;
end)
.ConfigureServices(procedure(Ctx: IHostBuilderContext; Services: IServiceCollection)
begin
// Ctx.Configuration está completamente construida aquí
Services.AddSingleton<IMyOptions>(TMyOptions.Create(Ctx.Configuration));
end)
.Build.Run;Documentación
- 📖 Guía de uso — proveedores en profundidad, claves jerárquicas, binder, fuentes personalizadas
Abstracciones
Configuration.Abstractions
🌍 Idioma: English | Español
Contratos principales del sistema de configuración de DAF. Este módulo define solo interfaces y tipos — sin implementación. Referencíalo en librerías que necesiten leer configuración sin depender de un proveedor concreto.
Qué hay en este módulo
Todos los tipos se encuentran en Daf.Extensions.Configuration.
Interfaces principales
| Interfaz | Rol |
|---|---|
IConfiguration |
Almacén clave-valor con navegación por secciones |
IConfigurationSection |
Subárbol nombrado de IConfiguration — añade Key, Path, Value, HasChildren |
IConfigurationRoot |
Raíz del árbol — añade Reload y Providers |
IConfigurationBuilder |
Constructor fluido: añade fuentes y llama a Build |
IConfigurationProvider |
Implementación de una fuente: TryGet, Set, Load, GetChildKeys |
IConfigurationSource |
Factoría de un proveedor: Build(Builder): IConfigurationProvider |
Acceso a claves
Config['Database:Host'] // clave directa
Config.GetSection('Database')['Host'] // via secciónEl separador de claves es :. Las secciones exponen GetChildren para iterar las sub-claves.
TConfigurationPath
Clase de utilidades para manipulación de rutas:
TConfigurationPath.Combine('Database', 'Host') // 'Database:Host'
TConfigurationPath.GetSectionKey('Database:Host') // 'Host'
TConfigurationPath.GetParentPath('Database:Host') // 'Database'TConfigurationSourceOption
type TConfigurationSourceOption = (csoOptional, csoReloadOnChange);Dependencias
Sin dependencias de otros módulos DAF. Solo RTL de Delphi.
La implementación está en Configuration.