私は基本Webページを持ち、すべてのaspxページを継承しています。私はベースページに入れて、それがすべての継承aspxページで利用できるようにいくつかの一般的なメソッドを持っています。グローバルWebサイトの設定にシングルトンインスタンスまたはスタティックインスタンスを使用するには
私は、この基本Webページで自分のウェブサイトの設定を取得するプロパティを1つ持っています。これは、アプリケーション全体のレコードです。キャッシュに保存しています。
BaseWebPage.csプロパティ
//website settings
public USP_GETWEBSITESETTINGSDETAILS WEBSITESETTING
{
get
{
USP_GETWEBSITESETTINGSDETAILS aWebsiteDetails = null;
if (Cache["websettings"] != null)
{
aWebsiteDetails = (USP_GETWEBSITESETTINGSDETAILS)Cache["WEBSITESETTINGSDETAILS"];
}
else
{
aWebsiteDetails = GetWebsitesettingsDetails();
Cache["websettings"] = aWebsiteDetails;
}
return aWebsiteDetails;
}
set
{
Cache["websettings"] = (USP_GETWEBSITESETTINGSDETAILS)value;
}
}
私が何をしたいのか、私は他のページに共通の設定にアクセスできるように、
BaseWebPage.StaticInstance.WEBSITESETTING
のようなものです。
私はこのBaseWebPage.cs内の他の性質を持って覚えているが、その他
CURRENT_USERID
、CURRENT_USERNAME
、CURRENT_USER_FULLNAME
、のようなファイル彼らは値がセッションに格納されている以外は、上記の特性に似ています。たとえば:
public int CURRENT_USERID
{
get
{
int iID = 0;
if (Session["MYUSERID"] == null)
iID = 0;
else
Int32.TryParse(Session["MYUSERID"].ToString(), out iID);
return iID;
}
set
{
Session["MYUSERID"] = (int)value;
}
}
私はシングルトンと静的クラスについて読み、まともな知識を持っているが、それは非常に良いアーキテクチャを持つように適切な方法で使用され得ることについてではない100%確認しています。
私はBaseWebPage.cs
// Singleton instance of this class
public static readonly BasePage StaticInstance = new BasePage();
に線の下に追加して、私が取得/設定用のBaseWebPage.StaticInstance.CURRENT_USERID
にアクセスするとき、それはアプリケーション全体のための単一のコピーになるだろうか、私が保管していて、それが一意になる場合それはセッションで?
ありがとうございます。他の良い選択肢があれば、私のアーキテクチャを改善してください。
よくシングルトンクラスを作成する方法がいくつか見つかっていますが、私はそれを使うべきか、静的なアプローチか他の方法をとるべきかについての良い提案に興味があります。 BaseWebPage.csにいくつかのパブリックメソッドがあり、前述のように私のaspxページのすべての親ですので、私はそれを 'sealed abstract'にすることはできません –