/// <summary>
        /// Inicializa una nueva instancia de la clase <see cref="ServiceLocator" />
        /// </summary>
        /// <param name="nonceGenerator">Instancia de <see cref="INonceGenerator" /> que se utiliza para inicializar el proveedor de valores nonce o <c>null</c> para utilizar la instancia predeterminada.</param>
        /// <param name="epochGenerator">Instancia de <see cref="IEpochGenerator" /> que se utiliza para inicializar el proveedor de valores epoch o <c>null</c> para utilizar la instancia predeterminada.</param>
        /// <param name="headersManager">Instancia de <see cref="IHeadersManager" /> que se utiliza para inicializar el proveedor de cabeceras para las solicitudes al servicio o <c>null</c> para utilizar la instancia predeterminada.</param>
        /// <param name="requestHeaderNames">Instancia de <see cref="IHeaderElement" /> que se utiliza para inicializar el proveedor de los nombres de cabeceras personalizadas o <c>null</c> para utilizar la instancia predeterminada.</param>
        /// <param name="payloadClaimNames">Instancia de <see cref="IPayloadClaimElement" /> que se utiliza para inicializar el proveedor de los nombres para las reclamaciones usadas en la carga útil del servicio o <c>null</c> para utilizar la instancia predeterminada.</param>
        /// <param name="payloadClaimsManager">Instancia de <see cref="IPayloadClaimsManager" /> que se utiliza para inicializar el proveedor de reclamaciones de la carga útil o <c>null</c> para utilizar la instancia predeterminada.</param>
        /// <param name="jwtJsonSerializer">Instancia de <see cref="IJsonSerializer" /> que se utiliza para inicializar el proveedor de serialización y deserialización de JWT o <c>null</c> para utilizar la instancia predeterminada.</param>
        /// <param name="webProxy">Instancia de <see cref="IWebProxy" /> que se utiliza para inicializar el proveedor del servidor proxy o <c>null</c> para utilizar la instancia predeterminada.</param>
        /// <param name="loggingProvider">Instancia de <see cref="ILoggingProvider" /> que se utiliza para inicializar el proveedor de escritura de trazas de seguimiento o <c>null</c> para utilizar la instancia predeterminada.</param>
        /// <param name="endpointProvider">Instancia que implementa <see cref="IEndpointProvider"/> para la obtención de valores de configuración.</param>
        /// <param name="appIdentity">Instancia que implementa <see cref="IAppIdentity"/> para la obtención de valores de configuración.</param>
        private void RegisterInstance(
            INonceGenerator nonceGenerator             = null,
            IEpochGenerator epochGenerator             = null,
            IHeadersManager headersManager             = null,
            IHeaderElement requestHeaderNames          = null,
            IPayloadClaimElement payloadClaimNames     = null,
            IPayloadClaimsManager payloadClaimsManager = null,
            IJsonSerializer jwtJsonSerializer          = null,
            IWebProxy webProxy = null,
            ILoggingProvider loggingProvider   = null,
            IEndpointProvider endpointProvider = null,
            IAppIdentity appIdentity           = null)
        {
            lock (padlock)
            {
                INonceGenerator       instanceOfNonceGenerator       = nonceGenerator ?? this.NonceGenerator ?? new GuidNonceGenerator();
                IEpochGenerator       instanceOfEpochGenerator       = epochGenerator ?? this.EpochGenerator ?? new UnixEpochGenerator();
                IHeaderElement        instanceOfRequestHeaderNames   = requestHeaderNames ?? this.RequestHeaderNames ?? new DefaultHeaderElement();
                IPayloadClaimElement  instanceOfPayloadClaimNames    = payloadClaimNames ?? this.PayloadClaimNames ?? new DefaultPayloadClaimElement();
                IPayloadClaimsManager instanceOfPayloadClaimsManager = payloadClaimsManager ?? this.PayloadClaimsManager ?? new DefaultPayloadClaimsManager();
                IHeadersManager       instanceOfHeadersManager       = headersManager ?? this.HeadersManager ?? new DefaultHeadersManager();
                IJsonSerializer       instanceOfJwtJsonSerializer    = jwtJsonSerializer ?? this.JwtJsonSerializer ?? new JsonNetSerializer();
                IWebProxy             instanceOfWebProxy             = webProxy ?? this.WebProxy ?? new NullWebProxy();
                ILoggingProvider      instanceOfLoggingProvider      = loggingProvider ?? this.LoggingProvider ?? new NullLoggingProvider();
                IEndpointProvider     instanceOfEndpointProvider     = endpointProvider ?? new EnvironmentEndpoint();
                IAppIdentity          instanceOfAppIdentity          = appIdentity ?? new EnvironmentIdentity();

                if (this.container != null)
                {
                    this.container.Dispose();
                    this.container = null;
                }

                this.container = new Container();
                this.container.RegisterInstance <IEnvironmentRuntime>(new EnvironmentRuntime());
                this.container.RegisterInstance(instanceOfNonceGenerator);
                this.container.RegisterInstance(instanceOfEpochGenerator);
                this.container.RegisterInstance(instanceOfRequestHeaderNames);
                this.container.RegisterInstance(instanceOfHeadersManager);
                this.container.RegisterInstance(instanceOfPayloadClaimNames);
                this.container.RegisterInstance(instanceOfPayloadClaimsManager);
                this.container.RegisterInstance(instanceOfJwtJsonSerializer);
                this.container.RegisterInstance(instanceOfWebProxy);
                this.container.RegisterInstance(instanceOfLoggingProvider);
                this.container.RegisterInstance(instanceOfEndpointProvider);
                this.container.RegisterInstance(instanceOfAppIdentity);
            }
        }
 /// <summary>
 /// Registra una instancia de <see cref="IPayloadClaimElement" /> que define los nombres que se utilizan para las reclamaciones usadas en la carga útil de una solicitud al servicio Aspen.
 /// </summary>
 /// <param name="payloadClaimNames">Instancia que implementa <see cref="IHeaderElement" />.</param>
 public void RegisterPayloadClaimNames(IPayloadClaimElement payloadClaimNames)
 {
     Throw.IfNull(payloadClaimNames, nameof(payloadClaimNames));
     this.RegisterInstance(payloadClaimNames: payloadClaimNames);
 }