Options Pattern en NET 6. Configuración en un proyecto de API e implementación en un proyecto externo(Librería de Clases)
Tags: csharp, netcore, rest, api
Published: 2023-01-17 20:09:44

En el siguiente artículo, explicaremos el uso de Options Pattern para acceder a los datos de nuestro archivo de configuración appsettings.json en NET 6.
Acceder a los datos del archivo appsettings desde un proyecto de API es relativamente sencillo, ya que nuestro proyecto contiene todos los paquetes necesarios, además de que la configuración ya se encuentra establecida por defecto dentro de la clase Program.

Imaginemos una situación, te encuentras desarrollando un proyecto, y debido a los requerimientos, necesitas de un servicio para el envío de correos electrónicos. Decides utilizar unas credenciales de desarrollo para enviar correos a modo de prueba(y por lo tanto, optas por utilizar un proveedor de correo de manera gratuita) con algún dirección que luzca de la siguiente manera "correfake@ejemplo.com", ya que por el momento, tu trabajo se enfoca en la lógica para el envío de correos y los detalles pueden esperar un poco.
Una vez que verificas que el proceso es exitoso, decides que es el momento perfecto para pasar a modo producción, y necesitas cambiar tu dirección de tu correo aleatorio a un email más profesional o a uno con mayor capacidad de envío de solicitudes de correo

Este es un ejemplo perfecto en el que podemos hacer uso de Options Pattern en C#, puedes definir un objeto JSON dentro del archivo appsettings que contenga todos los datos que necesitas para construir una clase encargada del envío de correos

Veamos algo de código para hacer un poco menos confuso este ejemplo.

En la siguiente encontrarás un objeto al que llamaos "Email" dentro del archivo de configuración, en el que establecemos las características que la mayoría de los proveedores de correo electrónico solicitan para establecer una conexión y autenticarte.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fg99ezbvr8pirrkqc1xu.PNG)

Los datos señalados en la imagen de arriba, podrán ser inyectados en tu clase encargada del envío de correos, para esto, primero hay que definir una clase que representará el objeto "Email", y por lo tanto, contendrá sus mimos datos, las propiedades deberán de ser las mismas, tanto en nombre como en tipo de dato

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mzadth4eio2g8fojdfno.PNG)

Posteriormente, el constructor de la clase, haciendo uso de la interfaz IOptions y apoyándonos de una clase en la cual sus propiedades tendrán los valores que se encuentran en el archivo de configuración (recuerda que las propiedades de tu clase deben de coincidir, tanto en nombre como en tipo de dato).



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3clse1opc3o3hpo2u796.PNG)

Ahora, dentro de la clase Program de tu proyecto de API, asociaremos los valores del objeto Email dentro del archivo de configuración a nuestra clase

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9fmu97vua1v6cwgevp7m.PNG)

El objeto builder que se crea por defecto dentro de la clase Program, contiene una propiedad Configuration de tipo ConfigurationManager, por el cual podemos acceder a secciones del archivo de configuración, lo primero es decirle que la sección a buscar es "Email", ya que ese es el nombre que tiene dentro de appsettings, y luego, el siguiente paso es hacer uso del método Configure para registrar los valores del objeto "Email" en la clase "EmailSetting", que es la clase que se inyectó en nuestro servico de correos, y todo esto es posible gracias al uso de la interfaz IOptions