nie pamiętam dla życia mnie gdzie ja pokornie ponownie przeznaczona ten kod, ale to bardzo miłe:
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;
}
}
}
}
}
Ideą dwojakie. Utworzony typ powinien być jedynym potrzebnym typem. Jest to w zasadzie duże, mocno wpisane opakowanie. Więc masz jakiś przedmiot chcesz zachować rozszerzenie informacji:
public class MyClass
{
public MyClass()
public string Blah1 { get; set; }
}
Następnie w dół drogi rozszerzyć MyClass
i nie chcesz mieć do zapamiętania wszystkich kluczowych wartości, przechowywać je w AppSettings lub zmiennych w Konst Klasy statyczne. Po prostu zdefiniuj, co chcesz przechowywać:
public class MyClassSession : SessionBase<MyClass>
{
}
A w dowolnym miejscu programu po prostu korzystasz z klasy.
// Any Asp.Net method (webforms or mvc)
public void SetValueMethod()
{
MyClassSesssion.Current.Blah1 = "asdf";
}
public string GetValueMethod()
{
return MyClassSession.Current.Blah1;
}
+1 To jest wzór I podążają - to naprawdę pomaga wyeliminować te brzydkie błędy literówka. –
Nie powinieneś używać 'const' w tym kontekście. 'static readonly' jest bardziej odpowiednie (i bezpieczne). – EkoostikMartin
Jak to złagodzi zasadę Nie Powtarza Się? Nadal piszesz tę samą linijkę 1 wszędzie, po prostu używasz stałej zmiennej zamiast ciągu instancji dla klucza? – BlackSpy