假设您可以更新 Session 类,您可以抽象 Session 类中的属性存储。在您当前的应用程序中,您可以创建一个简单的内存存储,而在 Web 应用程序中,您可以创建一个 Web 会话存储。
首先定义一个 session-value-provider,你在当前的静态 Session 类中使用它。
public interface ISessionValueProvider {
string CurrentUser { get; set; }
string CurrentDatabase { get; set; }
string CurrentCompanyProfile { get; set; }
string CurrentLanguage { get; set; }
}
public static class Session {
private static ISessionValueProvider _sessionValueProvider;
public static void SetSessionValueProvider(ISessionValueProvider provider) {
_sessionValueProvider = provider;
}
public static string CurrentUser {
get { return _sessionValueProvider.CurrentUser; }
set { _sessionValueProvider.CurrentUser = value; }
}
// Etc for the other props
}
对于您当前的应用程序,定义一个使用内存来存储值的会话值提供程序。
public class MemorySessionValueProvider: ISessionValueProvider {
public string CurrentUser {get; set; }
// Etc for the other props
}
要使用它,请创建一个实例并将其提供给静态会话类。例如,您可以将其添加到您的 Main 方法中。
Session.SetSessionValueProvider(new MemorySessionValueProvider());
现在为您的 Web 应用程序创建一个使用 Web 会话的会话值提供程序。
public class WebSessionValueProvider: ISessionValueProvider {
private const string CURRENTUSERKEY = "CurrentUser"; // TODO: Change this if necessary
public string CurrentUser {
get { return (string)HttpContext.Current.Session[CURRENTUSERKEY]; }
set { HttpContext.Current.Session[CURRENTUSERKEY] = value; }
}
// Etc for the other props
}
再次,将这个 web-session-value-provider 的实例提供给静态会话类。例如,在 global.asax 中。
Session.SetSessionValueProvider(new WebSessionValueProvider);