Uso de ServiceLocator

La clase ServiceLocator tiene como objetivo facilitar la modularidad de la aplicación eliminando las dependencias entre implementaciones. Las interfaces son una de las herramientas más flexibles y potentes para desacoplar los componentes de software y mejorar la capacidad de mantenimiento del código. El patrón del localizador de servicios es una opción para evitar las dependencias, al actuar como un registro central que proporciona implementaciones de diferentes interfaces. Al hacerlo, los componentes que usan una interfaz ya no necesitan conocer la clase que implementa la interfaz. En lugar de crear una instancia de cada clase, se obtiene una implementación a través del localizador de servicios, que actúa como el registrador único para todos los servicios que se utilizan en la aplicación.

Como siempre en la ingeniería de software, no hay balas de plata por lo que el uso de este patrón tiene apoyo y rechazo en la comunidad.

Para acceder a la instancia actual de ServiceLocator, se utiliza la propiedad estática Instance y a partir de esta instancia se pueden establecer valores para cada componente en tiempo de ejecución.

ServiceLocator

Por ejemplo, para establecer la instancia de configuración para el descubrimiento de la Url del servicio Aspen, puede utilizar el método SetDefaultEndpoint que recibe como parámetro la instancia de una clase que implemente la interfaz IEndpointProvider.

// Establece que se utilice una instancia de RegistryEndpoint para obtener la configuración de conexión con el servicio Aspen.
ServiceLocator.Instance.SetDefaultEndpoint(new RegistryEndpoint());

El mismo principio aplica para los componentes del sistema que se mencionan en la siguiente lista:

Operación/Método Descripción Valor predeterminado
SetDefaultEndpoint Establece la instancia de configuración que se debe utilizar para el descubrimiento de la Url y el tiempo de espera del servicio Aspen. EnvironmentEndpoint
SetDefaultIdentity Establece la instancia de configuración que se debe utilizar para el descubrimiento de las credenciales de conexión que se envían en las cabeceras de autenticación. EnvironmentIdentity
RegisterEpochGenerator Establece la instancia que se debe utilizar para generar las marcas de tiempo Unix que se requieren en cada petición que se envía al servicio Aspen. UnixEpochGenerator
RegisterHeadersManager Establece la instancia que se debe utilizar para agregar las cabeceras personalizadas requeridas por el servicio Aspen. DefaultHeadersManager
RegisterJwtJsonSerializer Establece la instancia que se debe utilizar para serializar la información enviada y generada para las solicitudes hacia/desde el servicio Aspen. JsonSerializer
RegisterLoggingProvider Establece la instancia que se debe utilizar para escribir la información de seguimiento (logging) generada localmente por la librería. NullLoggingProvider
RegisterNonceGenerator Establece la instancia que se debe utilizar para generar números o cadenas aleatorias de un único uso. GuidNonceGenerator
RegisterPayloadClaimNames Establece la instancia que se debe utilizar para establecer los nombres de las reclamaciones que se utilizan en la carga útil (Payload) de una solicitud hacia el servicio Aspen. DefaultPayloadClaimElement
RegisterPayloadClaimsManager Establece la instancia que se debe utilizar para agregar las reclamaciones que se utilizan en la carga útil (Payload) de una solicitud hacia el servicio Aspen. DefaultPayloadClaimsManager
RegisterRequestHeaderNames Establece la instancia que se debe utilizar para establecer los nombres que se utilizan en las cabeceras personalizadas de las solicitudes hacia el servicio Aspen. DefaultHeaderElement
RegisterWebProxy Establece la instancia que se debe utilizar como la configuración del servidor Proxy que permite establecer la comunicación hacia el servicio Aspen. NullWebProxy
Reset Reestablece la configuración a sus valores predeterminados No aplica