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. En este caso, presentamos la configuración para conectar con MongoDB y sus opciones relacionadas.
MongoOptions
La clase MongoOptions
proporciona un conjunto de opciones que pueden configurarse en el archivo appsettings.json
de tu aplicación. Estas opciones son esenciales para definir el comportamiento y la configuración de la conexión con MongoDB.
namespace CodeDesignPlus.Net.Mongo.Abstractions.Options;
/// <summary>/// Represents the options for configuring MongoDB./// </summary>public class MongoOptions : IValidatableObject{ /// <summary> /// The name of the section used in the configuration. /// </summary> public static readonly string Section = "Mongo";
/// <summary> /// Gets or sets a value indicating whether MongoDB is enabled. /// </summary> public bool Enable { get; set; }
/// <summary> /// Gets or sets the connection string for MongoDB. /// </summary> [Required] public string ConnectionString { get; set; }
/// <summary> /// Gets or sets the name of the MongoDB database. /// </summary> [Required] public string Database { get; set; }
/// <summary> /// Gets or sets the diagnostics options for MongoDB. /// </summary> public MongoDiagnosticsOptions Diagnostic { get; set; } = new();
/// <summary> /// Gets or sets a value indicating whether to register automatic repositories. /// </summary> public bool RegisterAutomaticRepositories { get; set; } = true;
/// <summary> /// Validates the properties of the MongoOptions. /// </summary> /// <param name="validationContext">The context information about the validation operation.</param> /// <returns>A collection of validation results.</returns> public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { var results = new List<ValidationResult>();
if (this.Enable) { Validator.TryValidateProperty( this.Database, new ValidationContext(this, null, null) { MemberName = nameof(this.Database) }, results );
Validator.TryValidateProperty( this.ConnectionString, new ValidationContext(this, null, null) { MemberName = nameof(this.ConnectionString) }, results );
if (this.Diagnostic.Enable) Validator.TryValidateObject(this.Diagnostic, new ValidationContext(this.Diagnostic), results, true); }
return results; }}
Propiedades
-
Enable
- Tipo: bool
- Descripción: Indica si MongoDB está habilitado.
- Valor Predeterminado: false
-
ConnectionString
- Tipo: string
- Descripción: La cadena de conexión utilizada para acceder a MongoDB.
- Valor Predeterminado: null
- Requerido: Sí
-
Database
- Tipo: string
- Descripción: El nombre de la base de datos de MongoDB.
- Valor Predeterminado: null
- Requerido: Sí
-
Diagnostic
- Tipo: MongoDiagnosticsOptions
- Descripción: Opciones de diagnóstico para MongoDB.
- Valor Predeterminado: Una nueva instancia de MongoDiagnosticsOptions.
-
RegisterAutomaticRepositories
- Tipo: bool
- Descripción: Indica si se deben registrar automáticamente los repositorios.
- Valor Predeterminado: true
Validación
La clase MongoOptions
implementa la interfaz IValidatableObject
para realizar validaciones adicionales al inicializar las opciones. En este caso, se valida que ConnectionString
y Database
no estén vacíos si la opción Enable
está activada. Además, se valida que las opciones de diagnóstico se ajusten si están habilitadas.
Ejemplo de Configuración
A continuación se muestra un ejemplo de archivo appsettings.json
que configura las opciones requeridas para MongoDB:
{ "Core": { "Business": "CodeDesignPlus", "AppName": "sample-mongo-repositorybase", "Version": "v1", "Description": "Sample of CodeDesignPlus.Net.Core", "Contact": { "Name": "CodeDesignPlus", "Email": "custom@outlook.com" } }, "Mongo": { "Enable": true, "ConnectionString": "mongodb://localhost:27017", "Database": "db_sample", "RegisterAutomaticRepositories": true }}