これは古くからの疲れた質問に違いないことはわかっていますが、信頼できる友人 (別名 Google) で何も見つけられないようです。
アプリケーションの起動時にユーザーにログインフォームを表示する.net 3.5 c# winformsアプリがあります。ログインに成功したら、DB に移動し、ユーザー固有のデータをいくつか取得して、それらをAppCurrentUser.csというクラスに (プロパティで) 保持します。これにより、アセンブリ内のすべてのクラスでアクセスできるようになります。目的これは、必要なたびに DB を呼び出す代わりに、1 回限りのデータ読み取りでいくつかのプロパティを埋めることができるということです。Web アプリでは通常、セッション変数を使用しますが、その概念が WinForms に存在しないことはわかっています。
クラス構造は次のようになります。
public class AppCurrentUser {
public AppCurrentUser() { }
public Guid UserName { get; set; }
public List<string> Roles { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
}
ここで、専門家のアドバイスが必要なオプションがいくつかあります。
「愚かな」クラスなので、プロパティを非静的にし、クラスをインスタンス化してからプロパティを設定する必要があります...しかし、そのインスタンスには、それが作成されたクラス内からしかアクセスできませんよね?
論理的には、これらのプロパティは静的である必要があると思います。これは、アプリケーション全体でクラスを 1 回だけ使用し (新しいインスタンスを作成しないため)、アプリケーションを閉じるとプロパティ値が「リセット」されるためです。(そのインスタンスを作成すると、アプリケーションの終了時に破棄できます)
クラスをどのように構築し、アセンブリ内のすべてのクラスでそのプロパティにアクセスするにはどうすればよいですか? これについてあなたの率直で貴重なアドバイスを本当に感謝します!!
ありがとう!