我试图利用单例类来存储登录用户名的变量。
我在LoginController中从Request.QueryString["username"]
获取用户名。
我将以下类作为singleton:我的问题是如何在单例类中传递此Request.QueryString["username"]
并在应用程序的任何位置访问此变量?我想在每个控制器中访问此变量。请帮忙。
public sealed class Settings
{
private static Settings instance = null;
static readonly object padlock = new object();
// initialize your variables here. You can read from database for example
Settings()
{
this.UserName= "prop1"; // I want to push the variable here
}
public static Settings Instance
{
get
{
lock (padlock)
{
if (instance == null)
{
instance = new Settings();
}
return instance;
}
}
}
// declare your global variables here
public string UserName{ get; set; }
}
答案 0 :(得分:0)
假设您希望拥有基于用户的上下文(由Session自身内部完成)
将字典对象创建为Dictionary>存储状态。外部字典将保存userName,而内部字典将保存上下文。
下面的Pseudeo代码
// 1.这个字典只需要在静态构造函数中初始化。
static ctor() {
stateObject = new Dictionary<string, Dictionary<string, object>()
}
// 2.有一个Login / Logout方法,每个方法都将userName作为参数。
Login(userName) {
if (stateObject.Keys[userName]) throw new Exception('user already logged in');
else stateObject.insert(userName, new Dictionary....)
}
Logout(userName) {
if (stateObject.Keys[userName])
stateObject.Remove(userName)
}
// 3.公开成员以获得所需的状态
State(userName, propertyKey) {
if (stateObject.Keys[userName])
if (stateObject.Keys[userName].Keys[propertyKey])
return (stateObject.Keys[userName].Keys[propertyKey])
else .. handle exceptions
}
您需要在此处再次传递userName的原因是您正在使用Singleton,因此所有实例都将具有其访问权限。 Session隐式传递sessionId,但行为方式完全相同