.net मैं कंसोल एप्लिकेशन में System.Web.Caching.Cache का उपयोग कैसे कर सकता हूं?




console-application httpcontext (5)

संदर्भ: नेट 3.5, सी #
मैं अपने कंसोल एप्लिकेशन में कैशिंग तंत्र रखना चाहता हूं।
पहिया का पुन: आविष्कार करने के बजाय, मैं System.Web.Caching.Cache का उपयोग करना चाहता हूं (और यह एक अंतिम निर्णय है, मैं अन्य कैशिंग ढांचे का उपयोग नहीं कर सकता, क्यों नहीं पूछूं)।
हालांकि, ऐसा लगता है कि System.Web.Caching.Cache केवल वैध HTTP संदर्भ में चलाना है। मेरा बहुत ही सरल स्निपेट इस तरह दिखता है:

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);
}

और नतीजा यह है:

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()

तो जाहिर है, मैं यहाँ कुछ गलत कर रहा हूँ। कोई विचार?

अद्यतन : अधिकांश उत्तरों में +1, स्थैतिक विधियों के माध्यम से कैश प्राप्त करना सही उपयोग है, अर्थात् HttpRuntime.Cache और HttpContext.Current.Cache । आप सभी को धन्यवाद!


System.Web.Caching.Cache क्लास अपने सदस्य "_cacheInternal" को HttpRuntime ऑब्जेक्ट द्वारा सेट करने पर निर्भर करता है।

System.Web.Caching कक्षाओं का उपयोग करने के लिए आपको एक HttpRuntime ऑब्जेक्ट बनाना होगा और HttpRuntime.Cache प्रॉपर्टी सेट अप करना होगा। आपको प्रभावी ढंग से आईआईएस अनुकरण करना होगा।

आप अन्य कैशिंग ढांचे का उपयोग करना बेहतर कर रहे हैं जैसे:


प्रयत्न

public class AspnetDataCache : IDataCache
{
    private readonly Cache _cache;

    public AspnetDataCache(Cache cache)
    {
        _cache = cache;
    }

    public AspnetDataCache()
        : this(HttpRuntime.Cache)
    {

    }
    public void Put(string key, object obj, TimeSpan expireNext)
    {
        if (key == null || obj == null)
            return;
        _cache.Insert(key, obj, null, DateTime.Now.Add(expireNext), TimeSpan.Zero);
    }

    public object Get(string key)
    {
        return _cache.Get(key);
    }


जबकि ओपी निर्दिष्ट v3.5, v4 जारी होने से पहले सवाल पूछा गया था। इस प्रश्न को ढूंढने वाले किसी भी व्यक्ति की सहायता करने के लिए और वी 4 निर्भरता के साथ रह सकते हैं, फ्रेमवर्क टीम ने इस प्रकार के परिदृश्य के लिए एक नया सामान्य उद्देश्य कैश बनाया है। यह सिस्टम में है। रनटाइम। कैशिंग नामस्थान: http://msdn.microsoft.com/en-us/library/dd997357%28v=VS.100%29.aspx

डिफ़ॉल्ट कैश उदाहरण के लिए स्थिर संदर्भ है: MemoryCache.Default


मैं इस पृष्ठ पर एक ही चीज़ सोचने पर समाप्त हुआ। यहां मैं जो कर रहा हूं (जो मुझे पसंद नहीं है लेकिन यह ठीक काम करता है):

HttpContext context = HttpContext.Current;
if (context == null)
{
    HttpRequest request = new HttpRequest(string.Empty, "http://tempuri.org", string.Empty);
    HttpResponse response = new HttpResponse(new StreamWriter(new MemoryStream()));
    context = new HttpContext(request, response);
    HttpContext.Current = context;
}
this.cache = context.Cache;

कैश कन्स्ट्रक्टर के लिए प्रलेखन का कहना है कि यह केवल आंतरिक उपयोग के लिए है। अपने कैश ऑब्जेक्ट को प्राप्त करने के लिए, कन्स्ट्रक्टर के माध्यम से उदाहरण बनाने के बजाय HttpRuntime.Cache पर कॉल करें।







httpcontext