private const int UserAgentsCacheTimeout = 60;                //user agents cache expire time.(minutes)

        /// <summary>
        ///   Returns ClientCapability based on HttpRequest
        /// </summary>
        public override IClientCapability GetClientCapability(string userAgent)
        {
            DeviceInfoClientCapability deviceInfoClientCapability = null;

            if (!string.IsNullOrEmpty(userAgent))
            {
                bool found = false;

                //try to get content from cache
                var cachedUserAgents = DataCache.GetCache <SharedDictionary <string, DeviceInfoClientCapability> >(UserAgentsCacheKey);
                if (cachedUserAgents != null)
                {
                    using (cachedUserAgents.GetReadLock())
                    {
                        if (cachedUserAgents.ContainsKey(userAgent))
                        {
                            deviceInfoClientCapability = cachedUserAgents[userAgent];
                            found = true;
                        }
                    }
                }

                if (!found)
                {
                    var deviceInfo = WurflProvider.GetDeviceInfo(userAgent);
                    if (deviceInfo != null)
                    {
                        deviceInfoClientCapability = new DeviceInfoClientCapability(deviceInfo);

                        //update cache content
                        if (cachedUserAgents == null)
                        {
                            cachedUserAgents = new SharedDictionary <string, DeviceInfoClientCapability>();
                        }
                        using (cachedUserAgents.GetWriteLock())
                        {
                            cachedUserAgents[userAgent] = deviceInfoClientCapability;
                        }
                        DataCache.SetCache(UserAgentsCacheKey, cachedUserAgents, TimeSpan.FromMinutes(UserAgentsCacheTimeout));
                    }
                }
            }

            var wurflClientCapability = new WURFLClientCapability(deviceInfoClientCapability);

            wurflClientCapability.UserAgent = userAgent;
            return(wurflClientCapability);
        }
    	private const int UserAgentsCacheTimeout = 60; //user agents cache expire time.(minutes)

        /// <summary>
        ///   Returns ClientCapability based on HttpRequest
        /// </summary>
        public override IClientCapability GetClientCapability(string userAgent)
        {
            DeviceInfoClientCapability deviceInfoClientCapability = null;

			if (!string.IsNullOrEmpty(userAgent))
			{
				bool found = false;

				//try to get content from cache
                var cachedUserAgents = DataCache.GetCache<SharedDictionary<string, DeviceInfoClientCapability>>(UserAgentsCacheKey);
				if (cachedUserAgents != null)
                {
                    using (cachedUserAgents.GetReadLock())
                    {
                        if (cachedUserAgents.ContainsKey(userAgent))
                        {
                            deviceInfoClientCapability = cachedUserAgents[userAgent];
                            found = true;
                        }                        
                    }
                }

				if (!found)
				{
					var deviceInfo = WurflProvider.GetDeviceInfo(userAgent);
					if (deviceInfo != null)
					{
						deviceInfoClientCapability = new DeviceInfoClientCapability(deviceInfo);

						//update cache content
						if(cachedUserAgents == null)
						{
                            cachedUserAgents = new SharedDictionary<string, DeviceInfoClientCapability>();
						}
                        using (cachedUserAgents.GetWriteLock())
                        {
                            cachedUserAgents[userAgent] = deviceInfoClientCapability;
                        }
					    DataCache.SetCache(UserAgentsCacheKey, cachedUserAgents, TimeSpan.FromMinutes(UserAgentsCacheTimeout));
					}
				}
			}

        	var wurflClientCapability =  new WURFLClientCapability(deviceInfoClientCapability);
            wurflClientCapability.UserAgent = userAgent;
            return wurflClientCapability;
        }