程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 在應用開發中實現對上下文(Context)數據的統一管理

在應用開發中實現對上下文(Context)數據的統一管理

編輯:關於ASP.NET

在應用開發中,我們經常需要設置一些上下文(Context)信息,這些上下文信息一般基於當前的會話 (Session),比如當前登錄用戶的個人信息;或者基於當前方法調用棧,比如在同一個調用中涉及的多 個層次之間數據。在這篇文章中,我創建了一個稱為ApplicationContext的組件,對上下文信息進行統一 的管理

一、基於CallContext和HttpSessionState的ApplicationContext

如何實現對上下文信息的存儲,對於Web應用來說,我們可以借助於HttpSessionState;對於GUI應用 來講,我們則可以使用CallConext。ApplicationContext完全是借助於這兩者建立起來的,首先來看看其 定義:

1: using System;
2: using System.Collections.Generic;
3: using  System.Runtime.Remoting.Messaging;
4: using System.Web;
5: namespace  Artech.ApplicationContexts
6: {
7:   [Serializable]
8:   public class  ApplicationContext:Dictionary<string, object>
9:   {
10:     public  const string ContextKey = "Artech.ApplicationContexts.ApplicationContext";
11:
12:      public static ApplicationContext Current
13:     {
14:        get
15:       {
16:         if (null != HttpContext.Current)
17:          {
18:           if (null == HttpContext.Current.Session [ContextKey])
19:           {
20:              HttpContext.Current.Session[ContextKey] = new ApplicationContext();
21:            }
22:
23:           return HttpContext.Current.Session[ContextKey]  as ApplicationContext;
24:         }
25:
26:         if (null  == CallContext.GetData(ContextKey))
27:         {
28:            CallContext.SetData(ContextKey, new ApplicationContext());
29:         }
30:         return CallContext.GetData(ContextKey) as  ApplicationContext;
31:       }
32:     }    
33:   }
34: }

為了使ApplicationContext定義得盡可能地簡單,我直接讓它繼承自 Dictionary<string,object>,而從本質上講ApplicationContext就是一個基於字典的上下文數據 的容器。靜態屬性Current表示當前的ApplicationConext,如何當前存在HttpContext,則使用 HttpConext的 Session,否則使用CallConext。Session和CallConext的采用相同的 Key: Artech.ApplicationContexts.ApplicationContext。你可以采用如下的方式對上下文數據進行設置和讀 取。

1: //設置
2: ApplicationContext.Current["UserName"] = "Foo";
3: //讀取
4: var userName = ApplicationContext.Current["UserName"];

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved