using System.Collections.Generic;
using Microsoft.Extensions.DependencyInjection;
namespace fl.shopper.example
private static void Main(string[] args)
var services = CreateServices();
Shopper app = services.GetRequiredService<Shopper>();
private static ServiceProvider CreateServices()
var serviceProvider = new ServiceCollection()
public class Shopper(IShoppingCart cart)
public IShoppingCart Cart = cart;
private void PrintCartContents(){
Console.WriteLine($"{"SKU",-14} {"Description",-40} {"QTY",-5} {"Cost",-10}");
Console.WriteLine(new string ('-',66));
foreach(var item in Cart.Items)
Console.WriteLine($"{item.Sku,-14} {item.Description,-40} {item.Qty,-5} {item.Cost.ToString("C"),-10}");
Console.WriteLine(new string ('-',66));
Console.WriteLine($"{"Sub-Total",35}: {Cart.SubTotal().ToString("C"),10}");
Console.WriteLine($"{"Tax",35}: {Cart.Tax().ToString("C"),10}");
Console.WriteLine($"{"Discounts",35}: {Cart.Discounts().ToString("C"),10}");
Console.WriteLine($"{"Total",35}: {Cart.Total().ToString("C"),10}");
public interface IShoppingCart{
void AddItem(ICartItem item);
void AddCoupon(ICoupon coupon);
IReadOnlyList<ICartItem> Items{get;}
public interface ICartItem{
public interface ICoupon{
void Apply(IShoppingCart cart);
public interface IShoppingConfig{