У меня есть базовая веб-страница, которая используется для наследования всех моих страниц aspx. У меня есть несколько общих методов, которые я поместил в базовую страницу, чтобы они были доступны на всех унаследованных страницах aspx.
У меня есть одно свойство, чтобы получить настройки моего веб-сайта на этой базовой веб-странице. Это всего лишь одна запись для всего приложения. Я храню его в кэше.
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;
}
}
Я читал об Singleton и статическом классе и у меня есть приличные знания, но я не уверен на 100%, как правильно его использовать, чтобы иметь очень хорошую архитектуру.
Если добавить строку ниже в BaseWebPage.cs
// Singleton instance of this class
public static readonly BasePage StaticInstance = new BasePage();
А когда я получу доступ к BaseWebPage.StaticInstance.CURRENT_USERID
для получения / установки, это будет одна копия для всего приложения или она будет уникальной, поскольку я храню ее в сеансе?
Большое спасибо за все предложения. Пожалуйста, помогите улучшить мою архитектуру, если у вас есть другие хорошие альтернативы.