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
Section titled “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.
using System.Security.Authentication;
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 a value indicating whether to register the health check. /// </summary> public bool RegisterHealthCheck { get; set; } = true;
/// <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 SSL protocols to use when connecting to MongoDB. /// </summary> public SslProtocols SslProtocols { get; set; } = SslProtocols.Tls12 | SslProtocols.Tls13;
/// <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 ); }
return results; }}
Propiedades
Section titled “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
Section titled “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
Section titled “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 }}