2010-02-23 60 views
3

如何創建一個類庫,我可以像IIS Session對象那樣獲取並設置對象,其中我使用var x = objectname("key")來獲取值或objectname("key") = x來設置值?如何創建一個C#會話對象包裝?

+0

你希望自己的對象交談IIS或者你只是作出類似的比較? – 2010-02-23 21:51:48

+0

你的問題具體是什麼?如何爲你的對象添加'[xxx]'支持?或者如何使物體到處都可用?要麼 ... ? – 2010-02-23 21:55:54

+0

Acrtally,我想寫一個替代IIS會話,所以我可以保存Web場的會話狀態。我想以一種不會改變當前設置或使用會話的所有地方的方式編寫它。 – Mike 2010-02-24 14:42:23

回答

9

通常我只是有圍繞我的會話數據,並使其類型安全就像一個靜態類:

public static class MySessionHelper 
{ 
    public static string CustomItem1 
    { 
     get { return HttpContext.Current.Session["CustomItem1"] as string; } 
     set { HttpContext.Current.Session["CustomItem1"] = value; } 
    } 

    public static int CustomItem2 
    { 
     get { return (int)(HttpContext.Current.Session["CustomItem2"]); } 
     set { HttpContext.Current.Session["CustomItem2"] = value; } 
    } 

    // etc... 
} 

然後,當我需要獲取或設置你只想做一個項目如下:

// Set 
MySessionHelper.CustomItem1 = "Hello"; 

// Get 
string test = MySessionHelper.CustomItem1; 

這是你在找什麼?

編輯:根據我對你的問題的評論,你不應該直接從你的應用程序中的頁面訪問會話。包裝類將使訪問類型不僅安全,而且還會爲您提供一箇中心點來進行所有更改。通過使用包裝器的應用程序,您可以在任何時候輕鬆地將Session選擇爲您選擇的數據存儲,而無需更改每個使用該會話的頁面。

我喜歡使用包裝類的另一件事是它記錄存儲在會話中的所有數據。下一個程序員可以通過查看包裝類來查看存儲在會話中的所有內容,這樣您就不會多次存儲相同的數據或重新獲取已在會話中緩存的數據。

+0

更像靜態類。它使訪問更容易。 – 2010-02-23 22:26:05

+0

謝謝。這非常有幫助。 – Mike 2010-02-25 01:25:01

+0

靜態類非常好 – 2010-02-25 05:08:45

5

我想,你可以使用像Dictionary<string, Object>或類似的通用字典來實現這種效果。當你通過Wrapper中的自定義默認屬性訪問非existend項目時,你將不得不編寫一些包裝代碼來添加一個Object。

2

你可以使用一些這樣的事

public class Session 
{ 
    private static Dictionary<string, object> _instance = new Dictionary<string, object>(); 
    private Session() 
    {    
    } 

    public static Dictionary<string, object> Instance 
    { 
     get 
     { 
      if(_instance == null) 
      { 
       _instance = new Dictionary<string, object>(); 
      } 
      return _instance; 
     } 
    } 
} 

而且使用這樣的

Session.Instance["key"] = "Hello World"; 
+1

我對一箇舊的答案發表評論表示歉意,但是由於這本詞典是在一個靜態的對象中,是否有可能與其他的網絡應用用戶共享?比方說,如果這個對象擁有用戶名,那會是一個問題嗎? – Dave 2015-01-27 17:11:31