Fábrica de Conexiones

La fábrica de conexiones es un mecanismo para facilitar la conexión hacia los diferentes repositorios que tenemos, independientemente de que tipo de repositorio sea, la fábrica puede proveernos la conexión que necesitamos.

Entorno Web

Cuando una aplicación web se inicia, se ejecuta un método llamado Application_Start el cual se encuentra en la clase Global del archivo global.asax, en este método se realizan las inicializaciones de diferentes componentes como lo son ruteos de mvc, ruteos de webApi, áreas de mvc, entre otros.

Se realiza la inicialización del la webApi por medio de la instrucción:

GlobalConfiguration.Configure(WebApiConfig.Register);

En el método Register de la clase WebApiConfig, se manda a inicializar los contenedores de Unity con la instrucción:

Bootstrapper.Initialise(config);

Dentro del método Initialise de la clase Bootstrapper, se realiza la inicialización de la fábrica con la siguiente instrucción

Utilerias.ContextoSD.Contenedor.Resolve<IConexion>().Inicializar();

De esta manera se inicializa la fábrica de conexiones.

¿Que sucede durante la inicialización?

Para determinar que sucede, veamos el siguiente diagrama de secuencia donde:

UnityU
ConexionesBEBE
ConexionDSDS
ConexionesConfigurationSectionHandlerCSH
Almacen de CertificadosStore

Diagrama de Secuencia de Fabrica de Conexiones.

  1. Unity resuelve a IConexion con ConexionesBE.
  2. Al resolverla crea una instancia de ConexionesBE.
  3. Al crear la instancia de ConexionesBE se crea una instancia de ConexionDS.
  4. ConexionDS llama a una propiedad estática (singleton) de ConexionesConfigurationSectionHandler.
  5. ConexionesConfigurationSectionHandler lee el archivo de configuración de conexiones.
  6. ConexionesConfigurationSectionHandler va por el certificado de encriptación al Almacen de Certificados.
  7. ConexionesConfigurationSectionHandler desencripta la configuración con el certificado.
  8. ConexionesConfigurationSectionHandler devuelve la configuración de la conexión a ConexionDS.
  9. Con esto se termina de instanciar tanto ConexionDS, como ConexionesBE.
  10. ConexionesBE ejecuta el método Inicializar.
  11. En dicho método se manda a ejecutar CargarConfiguración.
  12. Se manda a llamar a ConexionDS el cual obtiene la conexión de Mongo por medio del método ConsultarConexion.
  13. Se cargan o se actualizan las conexiones.
  14. Termina la inicialización de la fábrica de conexiones.

¿Que es el archivo de configuración?

El archivo de configuración es un archivo XML el cual contiene la configuración para conectarse al servidor de conexiones, tambien define el ambiente al cual se quiere conectar.

El archivo contiene la siguiente estructura:

<conexiones ambiente="desarrolloUno">Cadena Encriptada</conexiones>

Donde el ambiente define el conjunto de conexiones las cuales podremos utilizar.

La Cadena Encriptada es un texto en Base64 encriptado a travez de un certificado SSL de 2048 bits y lo que contiene es una estructura XML con la siguiente definición:

<?xml version="1.0" encoding="utf-8"?>
<conexiones ambiente="desarrolloUno">
  <conexion>
    <Value>Cadena de conexion del Servidor de Conexiones</Value>
  </conexion>
  <credencial usuario="nombreUsuario" contrasena="Contraseña" />
</conexiones>

Donde la conexión es la cadena de conexión del servidor que contiene todas las conexiones.

Credencial es un mecanismo para validar que esa conexión puede consumir el ambiente especificado.

Este archivo de conexion utiliza el mecanismo de configuración de .Net, por lo tanto debe especificarse en la sección de configuración de los archivos de configuracion de .Net, y posteriormente definir el elemento haciendo referencia al archivo de configuracion de conexiones, es decir, en el app.config, web.config o machine.config se debe agregar la siguiente línea en la sección configuration/configSections:

<section name="conexiones" type="SD.Conexiones.ConexionesConfigurationSectionHandler, SD"/>

Despues en cualquier parte de la sección configuration agregar la siguiente línea:

<conexiones configSource="conexiones.config"></conexiones>

Para mas información sobre la jerarquía de las configuraciones revisar Módelo de Configuración de DotNet.