public Receipt MakePayment(PaymentModel paymentModel, ServiceProviderType serviceProviderType, IBill bill) { IServiceProvider serviceProvider = serviceProviderFactory.GetServiceProvider(serviceProviderType); IService service = serviceProvider.GetService(bill.ServiceName); var payment = paymentDAL.MakePayment(paymentModel); if (payment.Value > 0) { return(service.GenerateReceipt(bill)); } else { throw new Exception("Payment failure."); } }