내가 겸손 에서이 코드를 다시 작정 내 인생 기억할 수는 없지만, 꽤 좋은 데요 :
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;
}
}
}
}
}
뒤에 아이디어 두 배. 생성 된 유형이 필요한 유일한 유형이어야합니다. 기본적으로 강력하게 유형화 된 래퍼입니다. 그래서 당신은 당신이 정보를 확장 유지하려는 일부 개체가 : 그런 길 아래에 당신이 MyClass
을 확장
public class MyClass
{
public MyClass()
public string Blah1 { get; set; }
}
당신은 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;
}
일이 내가 따르는 경향이 패턴은 상속 결코 바랍니다. –
이 문맥에서'const'를 사용하면 안됩니다. '정적 읽기 전용'이 더 적절하고 안전합니다. – EkoostikMartin
그게 반복 자신의 원칙을 완화시키는 방법은 무엇입니까? 어디서나 동일한 1 개의 라이너를 쓰고 있습니다. 키의 인스턴스 문자열 대신에 상수 변수를 사용하고 있습니까? – BlackSpy