Context: .Net 3.5, C#
I'd like to have caching mechanism in my Console application.
Instead of re-inventing the wheel, I'd like to use System.Web.Caching.Cache
(and that's a final decision, I can't use other caching framework, don't ask why).
However, it looks like System.Web.Caching.Cache
is supposed to run only in a valid HTTP context. My very simple snippet looks like this:
using System;
using System.Web.Caching;
using System.Web;
Cache c = new Cache();
try
{
c.Insert("a", 123);
}
catch (Exception ex)
{
Console.WriteLine("cannot insert to cache, exception:");
Console.WriteLine(ex);
}
and the result is:
cannot insert to cache, exception: System.NullReferenceException: Object reference not set to an instance of an object. at System.Web.Caching.Cache.Insert(String key, Object value) at MyClass.RunSnippet()
So obviously, I'm doing something wrong here. Any ideas?
Update: +1 to most answers, getting the cache via static methods is the correct usage, namely HttpRuntime.Cache
and HttpContext.Current.Cache
. Thank you all!
The documentation for the Cache constructor says that it is for internal use only. To get your Cache object, call HttpRuntime.Cache rather than creating an instance via the constructor.