创建全局对象?
我试图实现以下目标:创建全局对象?
当用户已经成功通过验证,我需要创造,我可以从不同的形式(或类)访问全球用户对象。
我正在查看VS中可用的数据源,并看到有一个“对象”选项可能适合我想实现的目标。麻烦在于,我不知道它是如何工作的。
任何人都可以指向正确的方向吗?
谢谢。
您可以使用或创建一个公共列表,确保您只在验证过的用户身上添加已验证的用户,甚至可以通过封装字段访问来创建列表或字符串[]属性。问你可能会想创建一个类级别的属性。
它被称为Singleton,它是一件坏事(特别是当它的状态可能发生变化时)。调查Dependency Injection(DI)。它甚至有一个.NET-specific book。
根据要求,这里有一个简单的(可能是过度简化的)手动做DI的例子。 A 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;
}
+1依赖注入。作为一个基本步骤,可能需要增加一个简单的例子,作为一个基本的步骤,通过IoC容器引用自动DI作为高级替代方法。 – 2011-12-19 07:27:06
假设这是一个Windows窗体应用程序,您可以创建存储在一个静态ApplicationState类用户类。
步骤:
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
。
这些“表单或类”对这个“用户对象”要求什么信息? – 2011-12-18 23:52:24
只是读取(并可能修改)它的属性的能力。通过属性。 – Nick 2011-12-18 23:56:58