예제 #1
0
 private void NeuesObjektWirdBenoetigtEventWerfen(
     ObjektCache <KeyTyp, ObjektTyp> .NeuesObjektWirdBenoetigtEventArgs eventArgs)
 {
     if (this.OnNeuesObjektWirdBenoetigt == null)
     {
         throw new ApplicationException("Es wurde kein Listener auf das 'NeuesObjektWirdBenötigt' Event registriert. Daher könnte *nie* ein Objekt aus dem ObjektCache geliefert werden.");
     }
     this.OnNeuesObjektWirdBenoetigt((object)this, eventArgs);
 }
예제 #2
0
        private void _domCache_OnNeuesObjektWirdBenoetigt(object sender, ObjektCache <string, XmlDocument> .NeuesObjektWirdBenoetigtEventArgs eventArgs)
        {
            string key = eventArgs.Key;

            if (File.Exists(key))
            {
                XmlDocument xmlDocument = new XmlDocument();
                xmlDocument.Load(key);
                eventArgs.Objekt = xmlDocument;
            }
        }
예제 #3
0
 public XmlDomDokFileCache()
 {
     this._domCache = new ObjektCache <string, XmlDocument>();
     this._domCache.OnNeuesObjektWirdBenoetigt += this._domCache_OnNeuesObjektWirdBenoetigt;
 }
예제 #4
0
 public XmlDomDokFileCache()
 {
     this._domCache = new ObjektCache <string, XmlDocument>();
     this._domCache.OnNeuesObjektWirdBenoetigt += new ObjektCache <string, XmlDocument> .NeuesObjektWirdBenoetigtEventHandler(this._domCache_OnNeuesObjektWirdBenoetigt);
 }
예제 #5
0
        public ObjektTyp GetCacheObjekt(
            KeyTyp key,
            object referenzObjekt,
            ObjektSerialisiererVerwaltung <ObjektTyp> .WasTunWennObjektNichtVorhanden wasTunWennNull)
        {
            ObjektTyp objekt1 = default(ObjektTyp);

            if (!this.NichtCachen)
            {
                try
                {
                    for (int index = this._container.Count - 1; index >= 0; --index)
                    {
                        if (DateTime.UtcNow.Ticks > this._container[index].VerfallsZeitpunktTicks)
                        {
                            lock (this._cacheLock)
                            {
                                ObjectCacheContainer <ObjektTyp, KeyTyp> objectCacheContainer = this._container[index];
                                this._container.Remove(objectCacheContainer);
                                objectCacheContainer.Dispose();
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                }
                foreach (ObjectCacheContainer <ObjektTyp, KeyTyp> objectCacheContainer in this._container)
                {
                    ObjektTyp objekt2 = objectCacheContainer.GetObjekt(key);
                    if ((object)objekt2 != null)
                    {
                        return(objekt2);
                    }
                }
            }
            ObjektCache <KeyTyp, ObjektTyp> .NeuesObjektWirdBenoetigtEventArgs eventArgs = new ObjektCache <KeyTyp, ObjektTyp> .NeuesObjektWirdBenoetigtEventArgs(key, referenzObjekt, objekt1, wasTunWennNull);

            this.NeuesObjektWirdBenoetigtEventWerfen(eventArgs);
            ObjektTyp objekt3 = eventArgs.Objekt;

            if (!this.NichtCachen && (object)objekt3 != null)
            {
                ObjectCacheContainer <ObjektTyp, KeyTyp> objectCacheContainer1 = (ObjectCacheContainer <ObjektTyp, KeyTyp>)null;
                if (this._container.Count == 0)
                {
                    objectCacheContainer1 = new ObjectCacheContainer <ObjektTyp, KeyTyp>(DateTime.UtcNow + this.MaxObjektLebensdauer);
                    this._container.Add(objectCacheContainer1);
                }
                else
                {
                    int index = 0;
                    try
                    {
                        for (; objectCacheContainer1 == null && index < this._container.Count; ++index)
                        {
                            objectCacheContainer1 = this._container[index];
                            if (objectCacheContainer1.AnzahlObjekte >= this._maxObjekteProContainer)
                            {
                                objectCacheContainer1 = (ObjectCacheContainer <ObjektTyp, KeyTyp>)null;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                    if (objectCacheContainer1 == null)
                    {
                        lock (this._cacheLock)
                        {
                            objectCacheContainer1 = new ObjectCacheContainer <ObjektTyp, KeyTyp>(DateTime.UtcNow + this.MaxObjektLebensdauer);
                            this._container.Add(objectCacheContainer1);
                            while ((long)this._container.Count > this._maxContainer)
                            {
                                ObjectCacheContainer <ObjektTyp, KeyTyp> objectCacheContainer2 = this._container[0];
                                this._container.Remove(objectCacheContainer2);
                                objectCacheContainer2.Dispose();
                            }
                        }
                    }
                }
                objectCacheContainer1.AddObjekt(key, objekt3);
            }
            if ((object)objekt3 == null)
            {
                switch (wasTunWennNull)
                {
                case ObjektSerialisiererVerwaltung <ObjektTyp> .WasTunWennObjektNichtVorhanden.FehlerWerfen:
                    throw new ApplicationException("Es konnte kein Objekt für den key '" + (object)key + "' bereitgestellt werden!");

                case ObjektSerialisiererVerwaltung <ObjektTyp> .WasTunWennObjektNichtVorhanden.NullZurueckgeben:
                    break;

                default:
                    throw new ApplicationException("Unbehandeltes ObjektCacheFehlerBeiNullObjekt '" + (object)wasTunWennNull + "' bei wasTunWennNull für key '" + (object)key + "'!");
                }
            }
            return(objekt3);
        }