我正在努力实现以下目标:
当用户成功通过身份验证后,我需要创建一个全局用户对象,我可以从不同的表单(或类)访问该对象。
我正在查看VS中可用的数据源,并看到有一个“对象”选项,它可能适合我想要实现的目标。麻烦的是,我不知道它是如何运作的。
有人能指出我正确的方向吗?
感谢。
答案 0 :(得分:4)
假设这是一个Windows窗体应用程序,您可以创建一个存储在静态ApplicationState类中的User类。
步骤:
1)创建用户类以保存有关用户的信息:
public class User
{
public string Login { get; set; }
//.. other properties
}
2)创建ApplicationState类:
public static class ApplicationState
{
public static User CurrentUser { get; set; }
}
3)在登录过程中,创建用户类的新版本并将其分配给ApplicationState.CurrentUser属性:
public void CompleteLogin(string sLogin)
{
User user = new User();
user.Login = sLogin;
ApplicationState.CurrentUser = user;
}
4)您现在可以在项目的任何位置使用ApplicationState.CurrentUser
。
答案 1 :(得分:2)
它被称为Singleton,这是一件坏事(特别是当它的状态可以变异时)。调查Dependency Injection(DI)。它上面甚至还有一个.NET-specific book。
根据请求,这是一个简单的(可能是过于简化的)手动执行DI的示例。 DI Container library(也称为控制反转或IoC容器库)可以简化组合根中“连接所有内容”的过程,通常还提供生命周期管理和其他功能。
// Composition root of your application
void Main()
{
// Only instance of user we will ever create
var user = new User();
var instance = new MyClass(user);
}
public interface IUser
{
string Name { get; set; }
}
public class User: IUser
{
public string Name { get; set; }
}
public class MyClass
{
public MyClass(IUser user)
{
if (user == null)
{
throw new ArgumentNullException("user");
}
_user = user;
}
private readonly IUser _user;
}
答案 2 :(得分:0)
您可以使用或创建一个公共列表,确保只有在经过验证后才能将经过身份验证的用户添加到列表中,您甚至可以通过封装字段访问,创建List或string []属性来执行此操作你可能想要创建一个类级别的属性。