/// <summary>
        /// Gets one strongly typed content item by its codename.
        /// </summary>
        /// <typeparam name="T">Type of the code-first model. (Or <see cref="object"/> if the return type is not yet known.)</typeparam>
        /// <param name="codename">The codename of a content item.</param>
        /// <param name="parameters">A collection of query parameters, for example for projection or depth of linked items.</param>
        /// <returns>The <see cref="IDeliveryItemResponse{T}"/> instance that contains the content item with the specified codename.</returns>
        public async Task <IDeliveryItemResponse <T> > GetItemAsync <T>(string codename, IEnumerable <IQueryParameter> parameters = null)
        {
            var queryParameters = parameters?.ToList();

            return(await _deliveryCacheManager.GetOrAddAsync(
                       CacheHelpers.GetItemKey <T>(codename, queryParameters),
                       () => _deliveryClient.GetItemAsync <T>(codename, queryParameters),
                       response => response != null,
                       CacheHelpers.GetItemDependencies));
        }
 /// <summary>
 /// Returns a content item as JSON data.
 /// </summary>
 /// <param name="codename">The codename of a content item.</param>
 /// <param name="parameters">An array that contains zero or more query parameters, for example for projection or depth of linked items.</param>
 /// <returns>The <see cref="JObject"/> instance that represents the content item with the specified codename.</returns>
 public async Task <JObject> GetItemJsonAsync(string codename, params string[] parameters)
 {
     return(await _deliveryCacheManager.GetOrAddAsync(
                CacheHelpers.GetItemJsonKey(codename, parameters),
                () => _deliveryClient.GetItemJsonAsync(codename, parameters),
                response => response != null,
                CacheHelpers.GetItemJsonDependencies));
 }