Skip to content

Options

El patrón de opciones es una técnica común en aplicaciones .NET que permite centralizar la configuración en un solo lugar, facilitando la gestión y validación de las opciones de configuración. Esta sección describe cómo configurar y validar las opciones para el núcleo de tu aplicación utilizando la clase CoreOptions.

CoreOptions


La clase CoreOptions proporciona un conjunto de opciones esenciales para configurar aspectos básicos de tu aplicación. Estas opciones pueden definirse en el archivo appsettings.json y validarse automáticamente durante la inicialización.

namespace CodeDesignPlus.Net.Core.Abstractions.Options;
/// <summary>
/// Options to setting of the Core
/// </summary>
public class CoreOptions : IValidatableObject
{
/// <summary>
/// Name of the setions used in the appsettings
/// </summary>
public static readonly string Section = "Core";
/// <summary>
/// Gets or sets the business
/// </summary>
[Required]
public required string Business { get; set; }
/// <summary>
/// Gets or sets the name
/// </summary>
[Required]
[RegularExpression(@"^[a-z-]+$")]
public required string AppName { get; set; }
/// <summary>
/// Gets or sets the version
/// </summary>
[Required]
[RegularExpression(@"^v\d+$")]
public required string Version { get; set; }
/// <summary>
/// Gets or sets the description
/// </summary>
[Required]
public required string Description { get; set; }
/// <summary>
/// Gets or sets the contact information
/// </summary>
[Required]
public required Contact Contact { get; set; }
/// <summary>
/// Validate the properties of the class
/// </summary>
/// <param name="validationContext">The context of the validation</param>
/// <returns> A collection that holds failed-validation information.</returns>
/// <exception cref="NotImplementedException"></exception>
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var results = new List<ValidationResult>();
if (this.Contact is null)
{
results.Add(new ValidationResult($"The {nameof(this.Contact)} field is required."));
}
else
{
var context = new ValidationContext(this.Contact, serviceProvider: null, items: null);
Validator.TryValidateObject(this.Contact, context, results, validateAllProperties: true);
}
return results;
}
}

Propiedades

  • Business

    • Tipo: string
    • Descripción: Representa el nombre del negocio asociado con la aplicación.
    • Requerido: Sí
  • AppName

    • Tipo: string
    • Descripción: Define el nombre de la aplicación.
    • Requerido: Sí
  • Version

    • Tipo: string
    • Descripción: La versión de la aplicación en formato vN (por ejemplo, v1, v2).
    • Requerido: Sí
  • Description

    • Tipo: string
    • Descripción: Una descripción breve de la aplicación.
    • Requerido: Sí
  • Contact

    • Tipo: Contact
    • Descripción: Información de contacto relacionada con la aplicación.
    • Requerido: Sí

Validación

La clase CoreOptions implementa IValidatableObject para realizar validaciones personalizadas. Esto incluye la validación de propiedades complejas como Contact.

Contact


La clase Contact representa la información de contacto asociada con la aplicación.

namespace CodeDesignPlus.Net.Core.Abstractions.Options;
/// <summary>
/// Represents a contact information.
/// </summary>
public class Contact
{
/// <summary>
/// Gets or sets the name of the contact.
/// </summary>
[Required]
public required string Name { get; set; }
/// <summary>
/// Gets or sets the email of the contact.
/// </summary>
[Required]
[EmailAddress]
public required string Email { get; set; }
}

Propiedades

  • Name

    • Tipo: string
    • Descripción: El nombre del contacto.
    • Requerido: Sí
  • Email

    • Tipo: string
    • Descripción: La dirección de correo electrónico del contacto.
    • Requerido: Sí
    • Validación Adicional: Debe ser una dirección de correo electrónico válida.

Validación

La clase Contact utiliza atributos de validación ([Required], [EmailAddress]) para garantizar que sus propiedades contengan valores válidos.

Ejemplo de Configuración


A continuación se muestra un ejemplo de archivo appsettings.json que configura las opciones requeridas:

{
"Core": {
"Business": "CodeDesignPlus",
"AppName": "sample-core",
"Version": "v1",
"Description": "Sample of CodeDesignPlus.Net.Core",
"Contact": {
"Name": "CodeDesignPlus",
"Email": "custom@outlook.com"
}
}
}

El patrón de opciones es una técnica común en aplicaciones .NET que permite centralizar la configuración en un solo lugar, facilitando la gestión y validación de las opciones de configuración. En CodeDesignPlus.Net.Core, utilizamos este patrón para ofrecer opciones de configuración estructuradas y fácilmente accesibles.

Referencias Adicionales