簡體   English   中英

如何創建C#會話對象包裝器?

[英]How to create a C# session object wrapper?

如何創建一個類庫,我可以在其中獲取和設置IIS Session對象,我使用var x = objectname("key")來獲取值或objectname("key") = x來設置值?

通常我只有一個靜態類來包裝我的會話數據並使其類型安全,如:

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替換為您選擇的數據存儲區,而無需對使用該會話的每個頁面進行更改。

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

我想,您可以使用像Dictionary<string, Object>這樣的通用字典或類似的東西來實現這種效果。 您必須編寫一些包裝代碼,以便在訪問非existend項時添加Object,例如Wrapper中的自定義默認屬性。

你可以使用這樣的東西

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";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM