2011-12-18 17 views
2

私は次のことを達成しようとしています:グローバルオブジェクトの作成?

ユーザーが正常に認証されたら、別のフォーム(またはクラス)からアクセスできるグローバルユーザーオブジェクトを作成する必要があります。

私はVSで利用可能なデータソースを調べていましたが、達成しようとしているものに適した「オブジェクト」オプションがあります。問題は、どのように動作するのかわかりません。

誰でも正しい方向に向けることができますか?

ありがとうございました。

+1

これらのさまざまな「フォームまたはクラス」には、この「ユーザーオブジェクト」からどの情報が必要ですか? –

+0

それは属性を読み取る(そして場合によっては変更する)ことができます。プロパティを介して。 – Nick

答えて

0

認証済みのユーザーをリストに追加したことを確認した後、フィールドアクセスのカプセル化、リストまたは文字列[]プロパティの作成あなたはおそらくクラスレベルのプロパティを作成したいと頼んでいます。

2

これはSingletonと呼ばれ、それは悪いことです(特にその状態が突然変異可能な場合)。代わりにDependency Injection(DI)を調べてください。そこにも.NET-specific bookがあります。

リクエストごとに、DIを手動で行う単純な(おそらく単純化された)例があります。 DI Container library(Inversion of ControlまたはIoC Containerライブラリとも呼ばれます)は、コンポジションルートで「すべてを配線する」プロセスを簡素化し、通常はライフタイム管理などの機能も提供します。

// 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を参照することで、これを手動で基本的な手順として行う方法の簡単な例を追加する価値があります。 –

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を使用できます。

関連する問題