/// <summary>
/// Returns Global Attributes from cache. If they are not already in cache, they
/// will be read and added to cache
/// </summary>
/// <returns></returns>
public static GlobalAttributesCache Read()
{
string cacheKey = GlobalAttributesCache.CacheKey();
ObjectCache cache = MemoryCache.Default;
GlobalAttributesCache globalAttributes = cache[cacheKey] as GlobalAttributesCache;
if (globalAttributes != null)
{
return(globalAttributes);
}
else
{
globalAttributes = new GlobalAttributesCache();
globalAttributes.Attributes = new List <AttributeCache>();
globalAttributes.AttributeValues = new Dictionary <string, KeyValuePair <string, string> >();
var attributeService = new Rock.Model.AttributeService();
var attributeValueService = new Rock.Model.AttributeValueService();
foreach (Rock.Model.Attribute attribute in attributeService.GetGlobalAttributes())
{
var attributeCache = AttributeCache.Read(attribute);
globalAttributes.Attributes.Add(attributeCache);
var attributeValue = attributeValueService.GetByAttributeIdAndEntityId(attribute.Id, null).FirstOrDefault();
string value = (attributeValue != null && !string.IsNullOrEmpty(attributeValue.Value)) ? attributeValue.Value : attributeCache.DefaultValue;
globalAttributes.AttributeValues.Add(attributeCache.Key, new KeyValuePair <string, string>(attributeCache.Name, value));
}
cache.Set(cacheKey, globalAttributes, new CacheItemPolicy());
return(globalAttributes);
}
}