public void apply(Promotion promotion, IBasketPricingService basket_pricing_service) { // double dispatch var coupon = promotion.create_coupon_for(this._id); _coupons.Add(coupon); recalculate_basket_totals(basket_pricing_service); }