public SignerRequestParams(IRequest <T> request, string regionNameOverride, string serviceNameOverride, string signingAlgorithm, string signDate)
        {
            if (request == null)
            {
                throw new ArgumentException("Request cannot be null");
            }

            if (signingAlgorithm == null)
            {
                throw new ArgumentException("Signing Algorithm cannot be null");
            }

            this._signingDateTimeMilli = null == signDate?this.GetSigningDate(request) : this.GetSigningDate(signDate);

            this._request = request;
            this._formattedSigningDate = SignerUtils.FormatDateStamp(this._signingDateTimeMilli);
            this._serviceName          = serviceNameOverride ?? "";
            this._regionName           = regionNameOverride ?? "";
            this._scope = this.GenerateScope(this._formattedSigningDate, this._serviceName, this._regionName);
            this._formattedSigningDateTime = SignerUtils.FormatTimestamp(this._signingDateTimeMilli);
            this._signingAlgorithm         = signingAlgorithm;
        }