コード例 #1
0
        ISiteConfigEntry ISiteConfigProvider.GetEntry(string key)
        {
            ISiteConfigEntry item = null;

            items.TryGetValue(key, out item);
            return(item);
        }
コード例 #2
0
ファイル: SiteConfig.cs プロジェクト: serenabenny/codeless
 private static object ParseValueFromEntry(PropertyDescriptor pd, ISiteConfigEntry entry)
 {
     if (pd.PropertyType == typeof(SecureString) && entry is ISecureSiteConfigEntry)
     {
         return(((ISecureSiteConfigEntry)entry).SecureValue);
     }
     return(ParseValue(pd, entry.Value));
 }
コード例 #3
0
        void ISiteConfigProvider.CreateEntry(ISiteConfigEntry entry)
        {
            SiteConfigEntry item = manager.Create <SiteConfigEntry>();

            item.Key             = entry.Key;
            item.Value           = entry.Value;
            item.UseDefaultValue = entry.UseDefaultValue;
            item.Category        = entry.Category;
            item.Description     = entry.Description;
            if (entry is ISecureSiteConfigEntry)
            {
                item.SecureValue = ((ISecureSiteConfigEntry)entry).SecureValue;
            }
        }
コード例 #4
0
ファイル: SiteConfig.cs プロジェクト: serenabenny/codeless
        private static T LoadInternal(Guid siteId)
        {
            T config = new T();

            config.siteId = siteId;
            using (SPSite elevatedSite = new SPSite(siteId, SPUserToken.SystemAccount)) {
                SiteConfigProviderAttribute attribute = typeof(T).GetCustomAttribute <SiteConfigProviderAttribute>(false);
                ISiteConfigProvider         provider;
                if (attribute == null)
                {
                    provider = new SiteConfigProvider();
                }
                else
                {
                    provider = (ISiteConfigProvider)attribute.ProviderType.CreateInstance();
                }
                provider.Initialize(elevatedSite);

                foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(config))
                {
                    ISiteConfigEntry entry      = provider.GetEntry(pd.Name);
                    bool             needUpdate = false;
                    bool             needCreate = false;

                    if (entry == null || entry.UseDefaultValue)
                    {
                        string defaultValueString = String.Empty;
                        try {
                            pd.ResetValue(config);
                            defaultValueString = Convert.ToString(pd.GetValue(config));
                        } catch (ArgumentException) {
                            DefaultValueAttribute defaultValueAttribute = (DefaultValueAttribute)pd.Attributes[typeof(DefaultValueAttribute)];
                            if (defaultValueAttribute != null && defaultValueAttribute.Value != null)
                            {
                                object defaultValue = ParseValue(pd, defaultValueAttribute.Value);
                                pd.SetValue(config, defaultValue);
                                defaultValueString = Convert.ToString(defaultValueAttribute.Value);
                            }
                        }
                        if (entry == null)
                        {
                            needCreate = true;
                            entry      = (pd.PropertyType == typeof(SecureString)) ? new SecureEntry()
                            {
                                Key = pd.Name
                            } : new Entry()
                            {
                                Key = pd.Name
                            };
                        }
                        if (!CompareString(entry.Value, defaultValueString))
                        {
                            entry.Value = defaultValueString;
                            needUpdate |= CompareString(entry.Value, defaultValueString);
                        }
                    }
                    else
                    {
                        object typedValue = ParseValueFromEntry(pd, entry);
                        pd.SetValue(config, typedValue);
                    }
                    if (!CompareString(entry.Category, pd.Category))
                    {
                        entry.Category = pd.Category;
                        needUpdate    |= CompareString(entry.Category, pd.Category);
                    }
                    if (!CompareString(entry.Description, pd.Description))
                    {
                        entry.Description = pd.Description;
                        needUpdate       |= CompareString(entry.Description, pd.Description);
                    }
                    if (needCreate)
                    {
                        provider.CreateEntry(entry);
                    }
                    else if (needUpdate)
                    {
                        provider.UpdateEntry(entry);
                    }
                    if (pd.GetValue(config) == null && pd.PropertyType.GetConstructor(new Type[0]) != null)
                    {
                        pd.SetValue(config, Activator.CreateInstance(pd.PropertyType));
                    }
                }
                provider.CommitChanges();

                if (HttpContext.Current != null)
                {
                    CacheDependency cacheDependency = provider.GetCacheDependency();
                    if (cacheDependency != null)
                    {
                        HttpContext.Current.Cache.Add(cacheDependency.GetUniqueID(), new object(), cacheDependency, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Normal, (k, v, r) => {
                            Logger.Info("Site config ({0}) flushed due to cache dependency.", typeof(T).FullName);
                            Invalidate(siteId);
                        });
                    }
                }
            }
            return(config);
        }
コード例 #5
0
 void ISiteConfigProvider.UpdateEntry(ISiteConfigEntry entry)
 {
 }