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

Referencias Adicionales