public ParkingLotController(IMemoryCache memoryCache, IParkingLotFactory parkingLotFactory, IVehicleFactory vehicleFactory)
        {
            _memoryCache       = memoryCache;
            _parkingLotFactory = parkingLotFactory;
            _vehicleFactory    = vehicleFactory;

            // Load up some test data using MemoryCache for demonstration
            _parkingLot = _memoryCache.GetOrCreate <IParkingLot>("ParkingLot", entry =>
            {
                var parkingLot = _parkingLotFactory.Create();
                parkingLot.ParkVehicle(_vehicleFactory.Create <CompactVehicle>());
                parkingLot.ParkVehicle(_vehicleFactory.Create <TruckVehicle>());

                return(parkingLot);
            });
        }
 /// <summary>
 /// Instantiates a new Parking lot Manager
 /// </summary>
 /// <param name="parkingLotFactory">Parking lot factory</param>
 public ParkingLotManager(IParkingLotFactory parkingLotFactory)
 {
     _parkingLotFactory = parkingLotFactory;
 }