public static void Main()
var calendarSerivce = UnityConfig.Container.Resolve<ICalendarService>();
Console.WriteLine($"Price: {calendarSerivce.GetPrice(DateTime.Today, DateTime.Today.AddDays(5))}");
public static class UnityConfig
private static Lazy<IUnityContainer> _container = new Lazy<IUnityContainer>(() => ConfigureContainer());
public static IUnityContainer Container => _container.Value;
private static IUnityContainer ConfigureContainer()
var container = new UnityContainer();
container.RegisterType<IPriceService, PriceService>();
container.RegisterType<ICalendarService, CalendarService>();
public interface IPriceService
decimal GetUplift(decimal rate, decimal uplift);
public interface ICalendarService
decimal GetPrice(DateTime startDate, DateTime endDate);
public class PriceService : IPriceService
private readonly ICalendarService _calendarService;
public PriceService(ICalendarService calendarService)
_calendarService = calendarService;
public decimal GetUplift(decimal rate, decimal uplift)
return rate * (uplift / 100M);
public class CalendarService : ICalendarService
private readonly IPriceService _priceService;
public CalendarService(IPriceService priceService)
_priceService = priceService;
public decimal GetPrice(DateTime startDate, DateTime endDate)
var rate = (decimal)(endDate - startDate).TotalDays * 100.0M;
return rate + _priceService.GetUplift(rate, 20.0M);