using System.Runtime.Remoting.Messaging;
using System.Web;
using System;namespace com.XXX.framework {
public sealed class AppUtil {
#region Thread-safe, lazy Singleton public static AppUtil Instance {
get {
return Nested.AppUtil;
}
} private AppUtil() {
}
private class Nested {
static Nested() { }
internal static readonly AppUtil AppUtil =
new AppUtil();
} #endregion
public UserDto GetUserDto() {
UserDto userDto = ContextUserDto;
if (userDto == null) {
throw new Exception("请在LonForm设置用户信息");
}
return userDto;
} /// <summary>
/// 保证session的线程安全性
/// 如果是web应用,使用 <see cref="HttpContext" />
/// 如果是windows应用使用 <see cref="CallContext" />.
/// </summary>
public UserDto ContextUserDto {
get {
if (IsInWebContext()) {
return (UserDto)HttpContext.Current.Items[UserDto_KEY];
} else {
return (UserDto)CallContext.GetData(UserDto_KEY);
}
}
set {
if (IsInWebContext()) {
HttpContext.Current.Items[UserDto_KEY] = value;
} else {
CallContext.SetData(UserDto_KEY, value);
}
}
}
/// <summary>
/// 判断是不是 web应用
/// </summary>
/// <returns></returns>
private bool IsInWebContext() {
return HttpContext.Current != null;
} private const string UserDto_KEY = "CONTEXT_UserDto";
}
}
但是要小心页面更新的时候,Page_load那里不要轻易赋值,如果赋值徭跟踪是否每次加载页面都是你需要的全局变量。