由于不想用session,所以我想定义一个类似于全局变量的类,用到了单例模式。
想用这种方法:登陆成功--》把登陆信息(ID,Name..当然还有一些更复杂的信息)--》在Controller中调用。
可是,我在Controll中调用的时候,实例一直是null,不知道为什么。
我的单例类:
1 public class Instance 2 { 3 private static Instance _instance; 4 private static object _lock = new object(); 5 private Instance() 6 { 7 } 8 public static Instance GetInstance() 9 { 10 if (_instance == null) 11 { 12 lock (_lock) 13 { 14 if (_instance == null) 15 { 16 _instance = new Instance(); 17 } 18 } 19 } 20 return _instance; 21 } 22 23 /// <summary> 24 /// 三层的时候调用的Server地址 25 /// </summary> 26 private string _servicesAddresses; 27 public string ServicesAddresses 28 { 29 get 30 { 31 _servicesAddresses = Phenix.Core.Net.NetConfig.ServicesAddresses; 32 return _servicesAddresses; 33 } 34 } 35 36 private string _currentServiceAddress; 37 public string CurrentServiceAddress 38 { 39 get { return _currentServiceAddress.Trim(); } 40 //get { return "127.0.0.1".Trim(); } 41 set { _currentServiceAddress = value; } 42 } 43 44 /// <summary> 45 /// 当前登陆的用户,如果已经授权,返回当前用户,如果没有授权,返回null 46 /// </summary> 47 private User _currentUser; 48 public User CurrentUser 49 { 50 get 51 { 52 //如果当前用户没有授权,则返回null 53 if (HttpContext.Current.User.Identity.IsAuthenticated) 54 return _currentUser; 55 else 56 return null; 57 } 58 //get 59 //{ 60 // return new User { Id = "ADMIN", Password = "ADMIN" }; 61 //} 62 set { _currentUser = value; } 63 } 64 }
然后在登陆成功后给单例类赋值:
1 //将当前登陆信息保存到单例变量中 2 Instance instance = Instance.GetInstance(); 3 instance.CurrentServiceAddress = user.ServicesAddresses; 4 instance.CurrentUser = user;
然后在Controller中调用:
1 var ss = Instance.GetInstance().CurrentUser;
这里获取到的一直是null。
纠结了好久,不知道什么地方出了问题,求指点。
注:我单步调试过,从给Instance赋值,一直到登陆成功单例类(Instance)中的_instance都是有值的,但是一进入到Controller的构造函数的时候,_instance就为null了。很奇怪,按道理讲static类型的_instance是不会重新变成null啊
问题解决了吗?大牛