public PaymentTransactionCreator(
            PaymentUrlProvider urlProvider,
            IEnumerable<TransactionDataHandler> transactionDataHandlers,
            ILogger logger,
            PublicBillingApiProxy billingApi)
            : base(billingApi)
        {
            if (urlProvider == null)
            {
                throw new ArgumentNullException("urlProvider");
            }

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

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

            this.urlProvider = urlProvider;
            this.transactionDataHandlers = transactionDataHandlers;
            this.logger = logger;
        }
        public FakeOrderPlacementService(PaymentUrlProvider urlProvider)
        {
            if (urlProvider == null)
            {
                throw new ArgumentNullException("urlProvider");
            }

            this.urlProvider = urlProvider;
        }
        public WorldPayHandler(PaymentUrlProvider urlProvider)
        {
            if (urlProvider == null)
            {
                throw new ArgumentNullException("urlProvider");
            }

            this.urlProvider = urlProvider;
        }
        public PayExRedirectHandler(PaymentUrlProvider urlProvider)
        {
            if (urlProvider == null)
            {
                throw new ArgumentNullException("urlProvider");
            }

            this.urlProvider = urlProvider;
        }
        /// <summary>
        /// Create a new instance of the service.
        /// </summary>
        public OrderPlacementService(
            PaymentUrlProvider urlProvider,
            IProductProvider productProvider,
            RenewalPeriodProvider renewalPeriodProvider,
            IEnumerable<PaymentDataHandler> paymentDataHandlers,
            OrderCreator orderCreator,
            PaymentTransactionCreator paymentTransactionCreator)
        {
            if (urlProvider == null)
            {
                throw new ArgumentNullException("urlProvider");
            }

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

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

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

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

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

            this.urlProvider = urlProvider;
            this.productProvider = productProvider;
            this.renewalPeriodProvider = renewalPeriodProvider;
            this.paymentDataHandlers = paymentDataHandlers;
            this.orderCreator = orderCreator;
            this.paymentTransactionCreator = paymentTransactionCreator;
        }
        public TokenLoginOrderCreator(PaymentUrlProvider urlProvider, IEnumerable<OrderDataHandler> orderDataHandlers, PublicBillingApiProxy billingApi) 
            : base(orderDataHandlers, billingApi) 
        { 
            if (urlProvider == null)
            {
                throw new ArgumentException("urlProvider");
            }

            this.urlProvider = urlProvider;
        }