我正在开展一个有很多帐户管理的项目。不幸的是,设置所有这些的人正在度假,这里需要做些什么,但我似乎无法理解这里到底发生了什么(我对此有点新鲜......)
基本上,据我所知:当有人登录我们的应用程序时,会创建一个单独的帐户。这里有两个类重要:
namespace Accounts
{
//Generische und Lazy Singleton-Abstraktion
public abstract class AbstractAccount<T> where T : class
{
// Lazy Instanziierung
private static readonly Lazy<T> _instance = new Lazy<T>(() => CreateSingletonInstance());
public static T Instance
{
get
{
// throw new System.InvalidOperationException("out");
return _instance.Value;
}
}
private static T CreateSingletonInstance()
{
// Konstruktion des Singleton-Objekts
return Activator.CreateInstance(typeof(T), true) as T;
}
}
}
和
class Account : AbstractAccount<Account>
{
// öffentliche Felder und Methoden
public string Username { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public string Description { get; set; }
public List<string>Friendlist { get; set; }
public Bitmap ProfilePicutre { get; set; }
public int Experience { get; set; }
public int gender { get; set; }
public DateTime lastLogin { get; set; }
public DateTime dateCreated { get; set; }
public string Locality { get; set; }
public string Country { get; set; }
public string CountryCode { get; set; }
public int level { get; set; }
public void SetCurrentAccount(tblUsers user, DateTime lastLogin)
{
this.Username = user.getUsername();
this.Email = user.getEmail();
this.Password = user.getPassword();
this.Description = user.getdescription();
this.Experience = user.getexperience();
this.gender = user.getgender();
this.lastLogin = lastLogin;
this.dateCreated = user.getDateCreated();
this.level = CheckLevel(Experience);
}
}
现在出现问题:当用户登录然后创建新帐户时,他或她仍然会设置他刚刚注销的用户的属性。
例如:如果他有1000 xp积分,那么退出并创建一个新帐户,该帐户不会从0点开始,而是在1000点开始。
我知道他从另一台电脑处理的时间非常多(甚至可能是不可能的)但我真的需要帮助:
private void logoutClick(object sender, EventArgs e)
{
Context mContext = Android.App.Application.Context;
AppPreferences ap = new AppPreferences(mContext);
ap.deletePreferences();
this.FinishAffinity();
//Remove static variables. Just to be sure!
SaveAccountInfo.bpLandScapePicFull = null;
SaveAccountInfo.bpLandScapePicThumb = null;
SaveAccountInfo.bpProfilePicFull = null;
SaveAccountInfo.bpProfilePicThumb = null;
StartActivity(typeof(Activity_AcctCreationLogin));
Finish();
}
如果用户现在要注销,则需要完全销毁单例,并在创建其他帐户时重新设置。我试过"Account.Instance.Dispose()"
但不幸的是,实例后没有“处理”这样的方法。
你们有没有机会帮助我一点点?真是太棒了!非常感谢! :)
答案 0 :(得分:4)
您可以将实例的值设置为新值。
在您的Account类中创建一个在注销时执行此操作的方法。
_instance = new Lazy<T>(() => CreateSingletonInstance());
答案 1 :(得分:1)
你应该使用这两种方法来使用Singleton模式:
public static T GetInstance
{
get
{
if (_instance == null)
_instance = new Lazy<T>(() => CreateSingletonInstance());
return _instance.Value;
}
}
public static void ReleaseInstance // called on logout
{
_instance = null;
}
另外,正如DavidG指出的那样,你应该添加一个受保护的构造函数。
答案 2 :(得分:0)
您是否可以实现IDisposable接口,然后编写自己的dispose方法。然后,您可以使用此方法清除要清除的数据。希望这会有所帮助。