public TestPaymentsAvailabilityStatement(
            Fifthweek.Shared.IExceptionHandler exceptionHandler,
            Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.ITransientErrorDetectionStrategy transientErrorDetectionStrategy,
            Fifthweek.Azure.ICloudStorageAccount cloudStorageAccount,
            ITimestampCreator timestampCreator,
            Fifthweek.Payments.Shared.IRequestProcessPaymentsService requestProcessPayments,
            Fifthweek.Api.Availability.ILastPaymentsRestartTimeContainer lastPaymentsRestartTimeContainer)
        {
            if (exceptionHandler == null)
            {
                throw new ArgumentNullException("exceptionHandler");
            }

            if (transientErrorDetectionStrategy == null)
            {
                throw new ArgumentNullException("transientErrorDetectionStrategy");
            }

            if (cloudStorageAccount == null)
            {
                throw new ArgumentNullException("cloudStorageAccount");
            }

            if (timestampCreator == null)
            {
                throw new ArgumentNullException("timestampCreator");
            }

            if (requestProcessPayments == null)
            {
                throw new ArgumentNullException("requestProcessPayments");
            }

            if (lastPaymentsRestartTimeContainer == null)
            {
                throw new ArgumentNullException("lastPaymentsRestartTimeContainer");
            }

            this.exceptionHandler = exceptionHandler;
            this.transientErrorDetectionStrategy = transientErrorDetectionStrategy;
            this.cloudStorageAccount             = cloudStorageAccount;
            this.timestampCreator                 = timestampCreator;
            this.requestProcessPayments           = requestProcessPayments;
            this.lastPaymentsRestartTimeContainer = lastPaymentsRestartTimeContainer;
        }
        public PaymentProcessor(
            Fifthweek.Payments.Services.IProcessAllPayments processAllPayments,
            IBlobLeaseFactory blobLeaseFactory,
            Fifthweek.Payments.Shared.IRequestProcessPaymentsService requestProcessPayments)
        {
            if (processAllPayments == null)
            {
                throw new ArgumentNullException("processAllPayments");
            }

            if (blobLeaseFactory == null)
            {
                throw new ArgumentNullException("blobLeaseFactory");
            }

            if (requestProcessPayments == null)
            {
                throw new ArgumentNullException("requestProcessPayments");
            }

            this.processAllPayments     = processAllPayments;
            this.blobLeaseFactory       = blobLeaseFactory;
            this.requestProcessPayments = requestProcessPayments;
        }