2008-12-05 6 views

Antwort

23

Ich habe gerade den System.Web.Caching.Cache im Reflektor durchlaufen. Es scheint, dass alles, was das Ablaufdatum betrifft, als intern markiert ist. Der einzige Ort, an dem ich öffentlichen Zugriff darauf fand, waren die Methoden Cache.Add und Cache.Insert.

So sieht es aus, als ob Sie Pech haben, es sei denn, Sie wollen durch Reflexion gehen, die ich nicht empfehlen würde, wenn Sie wirklich dieses Datum wirklich brauchen.

Aber wenn Sie trotzdem, es zu tun, dann ist hier einige Code, der den Trick tun würde:

private DateTime GetCacheUtcExpiryDateTime(string cacheKey) 
{ 
    object cacheEntry = Cache.GetType().GetMethod("Get", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(Cache, new object[] { cacheKey, 1 }); 
    PropertyInfo utcExpiresProperty = cacheEntry.GetType().GetProperty("UtcExpires", BindingFlags.NonPublic | BindingFlags.Instance); 
    DateTime utcExpiresValue = (DateTime)utcExpiresProperty.GetValue(cacheEntry, null); 

    return utcExpiresValue; 
} 
+0

du hast meinen Speck gerettet! ty für diesen Code! daran hätte ich nie gedacht, weil mir system.reflection nicht bekannt ist! – Rainhider

+0

Warum wird diese Methode nicht empfohlen? lädt es das ganze Cache-Objekt, während man es betrachtet? – Yovav

+0

Es wird wirklich hilfreich für mich sein, wenn Sie bitte Schritte zur Verwendung von Reflektor geben .. Ich kann diese Funktion nicht verwenden, da es einige Fehler gibt .. – SID

-3

Cache selbst läuft nicht ab. Entweder kann es Gegenstände haben (die ablaufen) oder überhaupt keine Gegenstände haben.

+0

Sie haben die Frage offensichtlich nicht verstanden. – Softlion

+0

@Softlion: Warum beantworten Sie nicht die Frage, wenn Sie welche haben? – shahkalpesh

+0

Es hat bereits eine Antwort, ich bin nur Kommentar mein Downvote – Softlion