首页 / 网页编程 / ASP.NET / 在应用开发中实现对上下文(Context)数据的统一管理
在应用开发中实现对上下文(Context)数据的统一管理2011-07-30 博客园 Artech在应用开发中,我们经常需要设置一些上下文(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"];