Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
10m 39s
La gestión de la configuración es un aspecto esencial de la creación de aplicaciones escalables y mantenibles en C#. Una de las formas más eficaces de gestionar los ajustes de configuración es utilizar el Patrón de opciones. En su vídeo, The Options Pattern in C# in 10 Minutes or Less, Tim Corey ofrece una explicación concisa pero perspicaz de este patrón y de cómo implementarlo de forma eficiente. En este artículo, exploraremos el patrón de opciones a través de las explicaciones y demostraciones de Tim en su vídeo.
Tim comienza presentando el Patrón de opciones como una forma potente pero sencilla de recuperar información de los archivos de configuración e inyectarla en la inyección de dependencias (DI). Destaca varias ventajas de este patrón, como:
Tim hace hincapié en que, aunque normalmente ofrece formación técnica en profundidad, este vídeo está diseñado como una guía de inicio rápido para implementar el patrón de opciones.
Tim comienza abriendo Visual Studio con una Blazor Web App (sólo renderización del lado del servidor). Ya ha realizado algunas modificaciones para agilizar la demostración. La configuración clave implica:
appsettings.json con una sección CloudInfo que contiene tres pares clave-valor.CloudInfoOptions, que mapea estos valores de configuración.El archivo appsettings.json contiene la siguiente sección:
{
"CloudInfo": {
"Storage": "Azure Storage",
"Website": "Azure Static Web Apps",
"API": "Azure Web App"
}
}
Tim aclara que mientras él está usando appsettings.json, los valores de configuración también podrían provenir de:
appsettings.Development.jsonsecrets.jsonAhora, Tim explica cómo vincular los valores de configuración a la clase CloudInfoOptions e inyectarlos en DI.
En Program.cs, Tim agrega la siguiente línea dentro de builder.Services:
builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));builder.Services.Configure(Of CloudInfoOptions)(builder.Configuration.GetSection("CloudInfo"))Esto vincula la sección CloudInfo de appsettings.json a la clase CloudInfoOptions. Tim señala que este paso garantiza que los valores estén disponibles en la inyección de dependencias.
Tim se mueve al componente de la página de inicio (Index.razor) y lo modifica para mostrar los valores de configuración dinámicamente.
Inyecta la interfaz IOptions en el componente:
@inject IOptions<CloudInfoOptions> CloudInfoOptions
Para recuperar los valores reales, los asigna dentro de OnInitialized:
protected override void OnInitialized()
{
CloudInfo = CloudInfoOptions.Value;
}Protected Overrides Sub OnInitialized()
CloudInfo = CloudInfoOptions.Value
End SubTim explica que IOptions<t> proporciona una instancia Singleton de los valores de configuración, lo que significa que permanece constante durante todo el ciclo de vida de la aplicación. Cuando se ejecuta la aplicación, los valores de configuración aparecen correctamente en la página.
A continuación, Tim presenta tres formas diferentes de utilizar el patrón de opciones:
Por defecto, IOptions<t> proporciona una instancia Singleton. Tim demuestra que si el archivo de configuración se actualiza mientras la aplicación se está ejecutando, los cambios no se reflejan a menos que se reinicie la aplicación.
IOptionsSnapshot<t>Para permitir actualizaciones por solicitud, Tim modifica la inyección para:
@inject IOptionsSnapshot<CloudInfoOptions> CloudInfoOptions
Esto garantiza que cada nueva solicitud HTTP reciba valores de configuración nuevos. Tim prueba esto modificando appsettings.json, actualizando la página, y mostrando que los valores actualizados ahora aparecen inmediatamente.
Él explica que IOptionsSnapshot<t> es útil para escenarios donde los cambios necesitan reflejarse sin reiniciar la aplicación pero no requieren monitoreo en vivo.
IOptionsMonitor<t>Finalmente, Tim introduce IOptionsMonitor<t>, que habilita la detección de cambios en tiempo real. Actualiza la inyección para:
@inject IOptionsMonitor<CloudInfoOptions> CloudInfoOptions
A diferencia de IOptionsSnapshot, que se actualiza por solicitud, IOptionsMonitor<t> puede desencadenar eventos cuando cambian los valores de configuración. Esto resulta especialmente útil cuando es necesario reaccionar a cambios de configuración de forma dinámica.
Tim señala que IOptionsMonitor<t> está respaldado por un singleton pero puede actualizar valores dinámicamente cuando el archivo de configuración subyacente cambia.
Tim concluye el vídeo resumiendo las principales diferencias entre los tres enfoques:
| Interfaz | De por vida | Actualizaciones sobre cambios |
|---|---|---|
IOptions<t> | Singleton | No |
IOptionsSnapshot<t> | Alcance | Por solicitud |
IOptionsMonitor<t> | Singleton | Sí |
Subraya que, si bien el patrón de opciones simplifica la gestión de la configuración, la comprensión de estas diferentes variaciones ayuda a elegir el enfoque adecuado en función de los requisitos del proyecto.
Siguiendo el enfoque de Tim, los desarrolladores pueden gestionar eficientemente la configuración de la aplicación, garantizar una inyección de dependencias fluida y gestionar los cambios de configuración en tiempo de ejecución de forma eficaz. Para una mejor comprensión, vea el vídeo completo y visite su canal para ver más vídeos interesantes sobre C#.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy