non riesco a ricordare per la vita di me, dove io umilmente riutilizzati questo codice da, ma è abbastanza piacevole:
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;
}
}
}
}
}
L'idea alla base di due volte. Il tipo creato dovrebbe essere l'unico tipo di cui hai bisogno. È fondamentalmente un grande involucro fortemente tipizzato. In modo da avere qualche oggetto che si desidera conservare estendere le informazioni in:
public class MyClass
{
public MyClass()
public string Blah1 { get; set; }
}
Poi lungo la strada si estende MyClass
e non si desidera avere a ricordare tutti i valori chiave, memorizzarli in AppSettings o variabili Const in Classi statiche. È sufficiente definire ciò che si desidera memorizzare:
public class MyClassSession : SessionBase<MyClass>
{
}
E in qualsiasi punto del programma si utilizza semplicemente la classe.
// Any Asp.Net method (webforms or mvc)
public void SetValueMethod()
{
MyClassSesssion.Current.Blah1 = "asdf";
}
public string GetValueMethod()
{
return MyClassSession.Current.Blah1;
}
fonte
2012-06-19 21:58:49
1 Questo è il modello tendo a seguire - in realtà aiuta ad eliminare quegli insetti fastidiosi typo. –
Non dovresti usare 'const' in questo contesto. 'static readonly' è più appropriato (e sicuro). – EkoostikMartin
Come è questo alleviare il principio di non ripetere te stesso? Stai ancora scrivendo lo stesso 1 rivestimento in tutto il mondo, stai solo usando una variabile costante invece di una stringa di istanza per la chiave? – BlackSpy