예제 #1
0
        public override void Configure(System.Xml.XmlElement element)
        {
            base.Configure(element);

            if (element.HasAttribute("availableMemoryLimit"))
            {
                availableMemoryLimit = Single.Parse(element.GetAttribute("availableMemoryLimit"));
            }
            else
            {
                availableMemoryLimit = 96.0f;
            }

            if (element.HasAttribute("miserInterval"))
            {
                miserInterval = TimeSpan.Parse(element.GetAttribute("miserInterval"));
            }
            else
            {
                miserInterval = TimeSpan.FromMinutes(1);
            }

            XmlElement volatileElement = (XmlElement) element.SelectSingleNode("volatileCache");
            if (volatileElement.HasAttribute("type"))
            {
                Type type = Type.GetType(volatileElement.GetAttribute("type"));
                volatileCache = (CacheBase) type.Assembly.CreateInstance(type.FullName);
                volatileCache.Configure(volatileElement);
            }

            XmlElement persistentElement = (XmlElement) element.SelectSingleNode("persistentCache");
            if (persistentElement.HasAttribute("type"))
            {
                Type type = Type.GetType(persistentElement.GetAttribute("type"));
                persistentCache = (CacheBase) type.Assembly.CreateInstance(type.FullName);
                persistentCache.Configure(persistentElement);
            }

            Type cacheBaseType = typeof(CacheBase);
            getCachedItemMethod = cacheBaseType.GetMethod("GetCachedItem", BindingFlags.Instance | BindingFlags.NonPublic);
            purgeMethod = cacheBaseType.GetMethod("Purge", BindingFlags.Instance | BindingFlags.NonPublic);

            miserTimer = new Timer(new TimerCallback(MiserTimerCallback), null, miserInterval, miserInterval);
        }