private void decideUpdateOrCreate(Customer cust, out HttpResponseMessage response)
        {
            response = null;
            try
            {
                Customer temp;
                if (!repository.TryGet(cust.ID, out temp))
                {
                    cust = repository.Add(cust);
                    response = Request.CreateResponse<Customer>(HttpStatusCode.Created, cust);
                    response.Headers.Location = new Uri(Request.RequestUri, "/api/customers/" + cust.ID.ToString());

                }

                else
                {
                    repository.Update(cust);
                    response = (new HttpResponseMessage(HttpStatusCode.OK));
                }
            }
            catch (Exception ex)
            {
                string form = String.Format("ERROR OCCURRED IN {0}  STACK TRACE IS {1} MESSAGE  IS {2} ",
                    "decideUpdateOrCreate", ex.StackTrace, ex.Message);
                logger.Error(form, ex);

            }


        }
        public bool TryGet(long id, out Customer cust)
        {
            try
            {
                return Customers.TryGetValue(id, out cust);
            }
            catch (Exception ex)
            {
                string form = String.Format("ERROR OCCURRED IN {0}  STACK TRACE IS {1} MESSAGE  IS {2} ",
                    "decideUpdateOrCreate", ex.StackTrace, ex.Message);
                logger.Error(form, ex);
                cust = null;
                return false;

            }

        }
        public Customer Add(Customer cust)
        {


            try
            {
                cust.ID = nextID++;
                Customers[cust.ID] = cust;
            }
            catch (Exception ex)
            {
                string form = String.Format("ERROR OCCURRED IN {0}  STACK TRACE IS {1} MESSAGE  IS {2} ",
                    "decideUpdateOrCreate", ex.StackTrace, ex.Message);
                logger.Error(form, ex);


            }

            return cust;
        }
 public HttpResponseMessage PostCustomer(Customer cust)
 {
     HttpResponseMessage response;
     decideUpdateOrCreate(cust, out response);
     return response;
 }
        public bool Update(Customer cust)
        {
            bool update = Customers.ContainsKey(cust.ID);

            //threads can cause assgn error
            try
            {
                Customers[cust.ID] = cust;
            }
            catch (Exception ex)
            {
                string form = String.Format("ERROR OCCURRED IN {0}  STACK TRACE IS {1} MESSAGE  IS {2} ",
                    "decideUpdateOrCreate", ex.StackTrace, ex.Message);
                logger.Error(form, ex);

            }

            return update;
        }