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.

Delphi 12+ Licencia


¿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 recargaIConfigurationRoot.Reload relee 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 poblados

Integració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.

Delphi 12+ Licencia


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ón

El 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.