/// <summary>
        /// Performs an Http GET call to the specified base address and endpoint.
        /// </summary>
        /// <typeparam name="TResponse">Expected response type to return</typeparam>
        /// <param name="baseAddress">Base address to api service being called</param>
        /// <param name="uri">Endpoint</param>
        /// <param name="headers">Headers to add to request</param>
        /// <param name="cacheCheck">Optional - async function to check cache</param>
        /// <param name="setCache">Optional - async function to add an item to cache</param>
        /// <returns>TResponse - null if not found</returns>
        /// <exception cref="HttpRequestException">Thrown if non 200 or 404 status code returned</exception>
        public async Task <TResponse> Get <TResponse>(string baseAddress, string uri,
                                                      IDictionary <string, string> headers,
                                                      Func <string, Task <TResponse> > cacheCheck = null, Func <TResponse, string, Task> setCache = null) where TResponse : class
        {
            var cache = await _httpCachingService.CheckCache(baseAddress, uri, null, cacheCheck);

            if (cache != null)
            {
                return(cache);
            }

            var response =
                await _httpService.CallHttpMethod <TResponse, object>(baseAddress, uri, null, headers, HttpMethods.GET);

            await _httpCachingService.AddToCache(response, baseAddress, uri, null, setCache);

            return(response);
        }