创建全局对象?
我正在努力实现以下目标:
当用户成功通过身份validation后,我需要创建一个全局用户对象,我可以从不同的表单(或类)访问该对象。
我正在查看VS中可用的数据源,并看到有一个“对象”选项,可能适合我想要实现的目标。 麻烦的是,我不知道它是如何工作的。
谁能指出我正确的方向?
谢谢。
假设这是一个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
。
它被称为Singleton ,它是一件坏事(特别是当它的状态可以变异时)。 调查dependency injection (DI)。 甚至还有一本特定于.NET的书 。
根据请求,这是一个简单的(可能是过于简化的)手动执行DI的示例。 DI容器库 (也称为控制反转或IoC容器库)可以简化组合根中“连接所有内容”的过程,并且通常还提供生命周期管理和其他function。
// 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; }
您可以使用或创建一个公共列表,确保只有在经过validation后才能将经过身份validation的用户添加到列表中,您甚至可以通过封装字段访问,创建List或string []属性来执行此操作。想要创建一个类级别的属性。