2011-12-18 95 views
2

我试图实现以下目标:创建全局对象?

当用户已经成功通过验证,我需要创造,我可以从不同的形式(或类)访问全球用户对象。

我正在查看VS中可用的数据源,并看到有一个“对象”选项可能适合我想实现的目标。麻烦在于,我不知道它是如何工作的。

任何人都可以指向正确的方向吗?

谢谢。

+1

这些“表单或类”对这个“用户对象”要求什么信息? – 2011-12-18 23:52:24

+0

只是读取(并可能修改)它的属性的能力。通过属性。 – Nick 2011-12-18 23:56:58

回答

0

您可以使用或创建一个公共列表,确保您只在验证过的用户身上添加已验证的用户,甚至可以通过封装字段访问来创建列表或字符串[]属性。问你可能会想创建一个类级别的属性。

2

它被称为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

+1依赖注入。作为一个基本步骤,可能需要增加一个简单的例子,作为一个基本的步骤,通过IoC容器引用自动DI作为高级替代方法。 – 2011-12-19 07:27:06

4

假设这是一个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