मैं मुझे के जीवन मैं कहाँ विनम्रतापूर्वक सोद्देश्य से इस कोड के लिए याद कर सकते हैं नहीं है, लेकिन यह बहुत अच्छा है:
using System;
using System.Web;
namespace Project.Web.UI.Domain
{
public abstract class SessionBase<T> where T : class, new()
{
private static readonly Object _padlock = new Object();
private static string Key
{
get { return typeof(SessionBase<T>).FullName; }
}
public static T Current
{
get
{
var instance = HttpContext.Current.Session[Key] as T;
lock (SessionBase<T>._padlock)
{
if (instance == null)
{
HttpContext.Current.Session[Key]
= instance
= new T();
}
}
return instance;
}
}
public static void Clear()
{
var instance = HttpContext.Current.Session[Key] as T;
if (instance != null)
{
lock (SessionBase<T>._padlock)
{
HttpContext.Current.Session[Key] = null;
}
}
}
}
}
इसके पीछे विचार दो गुना। बनाया गया प्रकार केवल एकमात्र प्रकार होना चाहिए जो आपको चाहिए। यह मूल रूप से एक बड़ा दृढ़ता से टाइप रैपर है। तो आप किसी वस्तु है आप में जानकारी का विस्तार रखना चाहते हैं:
public class MyClass
{
public MyClass()
public string Blah1 { get; set; }
}
फिर सड़क के नीचे आप MyClass
का विस्तार करने और आप नहीं है सभी कुंजी मान याद करने के लिए, उन्हें AppSettings या में कॉन्स्ट चर में स्टोर चाहते हैं स्टेटिक क्लासेस
public class MyClassSession : SessionBase<MyClass>
{
}
और कहीं भी अपने कार्यक्रम में आप बस वर्ग का उपयोग करें: आप बस क्या आप संग्रहीत करना चाहते हैं परिभाषित करते हैं। यह वास्तव में उन परेशान करने टाइपो कीड़े खत्म करने में मदद करता है -
// Any Asp.Net method (webforms or mvc)
public void SetValueMethod()
{
MyClassSesssion.Current.Blah1 = "asdf";
}
public string GetValueMethod()
{
return MyClassSession.Current.Blah1;
}
स्रोत
2012-06-19 21:58:49
+1 यह पैटर्न मैं पालन करती हैं वारिस कभी नहीं चाहते हैं। –
आपको इस संदर्भ में 'const' का उपयोग नहीं करना चाहिए। 'स्थिर रीडोनली 'अधिक उपयुक्त (और सुरक्षित) है। – EkoostikMartin
वह अपने आप को दोहराने के सिद्धांत को कम कैसे कर रहा है? आप अभी भी वही 1 लाइनर लिख रहे हैं, आप कुंजी के लिए एक उदाहरण स्ट्रिंग के बजाय स्थिर चर का उपयोग कर रहे हैं? – BlackSpy