持久登录用户信息

时间:2011-09-16 03:01:09

标签: c# winforms class

我知道这是一个简单的概念,但我需要一些帮助。我在c#中创建了一个winforms应用程序,我正在尝试组织我的代码。第一个屏幕是登录,一旦用户通过身份验证,我将返回用户详细信息。我应该如何/在哪里存储这些细节,以便每次我想使用它们时都不必再次检索它们?

谢谢!

3 个答案:

答案 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>())。