我知道这是一个简单的概念,但我需要一些帮助。我在c#中创建了一个winforms应用程序,我正在尝试组织我的代码。第一个屏幕是登录,一旦用户通过身份验证,我将返回用户详细信息。我应该如何/在哪里存储这些细节,以便每次我想使用它们时都不必再次检索它们?
谢谢!
答案 0 :(得分:2)
与其他人对全局静态类所说的一致,但有一些示例代码:
public class UserInfo
{
private int userID;
public int UserID
{
get { return userID; }
}
private string userName;
public string UserName
{
get { return userName; }
}
public UserInfo(int userID, string userName)
{
this.userID = userID;
this.userName = userName;
}
}
public static class GlobalInfo
{
private static UserInfo currentUser;
public static UserInfo CurrentUser
{
get { return currentUser; }
set { currentUser = value; }
}
}
因此,在用户登录后,保存登录信息:
GlobalInfo.CurrentUser = new UserInfo(123, "Bob Jones");
当您需要获取信息时:
UserInfo userInfo = GlobalInfo.CurrentUser;
答案 1 :(得分:1)
您可以按照此question中的回答创建全局静态类,或查看Singleton Pattern实现
...或阅读此question "Global variable approach in C# Windows Forms application? (is public static class GlobalData the best)"以获取更多选项。
答案 2 :(得分:0)
我会像@brodie所说的那样使用单例,但实现为推入DI容器的用户详细信息对象的实例。例如,Ninject通过BindToConstant
支持binding to a instance。因此,当用户登录时,您将创建LoggedInUser
实例(已登录用户的详细信息),然后Bind<LoggedInUser>.ToConstant(myLoggedInUser)
(来自内存)。然后,如果您需要获取登录用户,您只需从DI容器中提取当前实例(通过类似kernel.Get<LoggedInUser>()
)。