2011-12-18 110 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