При настройке моего сайта у меня есть главная страница, страница, а затем элементы управления на этой странице, все, что может отображать информацию о просматриваемом пользователе.
Поскольку мне требуется эта информация довольно много раз, мне приходится создавать экземпляр моей модели, а затем возвращать объект User каждый раз, когда мне нужно прочитать данные из их учетной записи.
Как способ борьбы с этим, я сделал следующее:
public static class Core
{
private static PatientRow Patient;
public static PatientRow GetCurrentPatient()
{
if (Patient == null && HttpContext.Current.User.Identity.IsAuthenticated && HttpContext.Current.User.IsInRole("Patient"))
{
using (PatientModel model = new PatientModel())
{
Patient = model.Find<PatientRow>(User.CurrentUser.UserID);
}
}
return Patient;
}
}
Как вы можете видеть, я проверяю, является ли закрытая статическая переменная Patient нулевой, если да, то уходит и получает ее. В следующий раз, когда я вызову GetCurrentPatient, так как Patient уже заполнен, я просто сохранил свой вызов в базе данных и т. Д.
Теперь возникает проблема ... Как мы все знаем, это будет означать, что каждый раз, когда я вызываю GetCurrentPatient, независимо от того, кто просматривает сайт, они получат последнее (или первое) установленное значение.
Я не хочу хранить объекты в сеансе, это непослушно, но мне нужно найти способ либо ограничить статическую область для сеанса пользователя, либо, для разумной компромисса, ограничить ее текущим выполнение страницы.
Есть предложения?
Приветствия
Редактировать: До прочтения ответа Дарина я реализовал следующее.
Каждая имеющаяся у меня страница наследует класс BasePage (чтобы упростить обработку меню и т. Д.). Поскольку любой код, хранящийся здесь, доступен только во время выполнения (за исключением статических переменных), я просто создал коллекцию Registry Dictionary, а затем из своего исходного GetCurrentPatient я просто проверил, содержит ли реестр этот объект, и если да, вернул его , если не получил, сохранил и, наконец, вернул.
Я внесу изменения в свой текущий код, чтобы он соответствовал коду Дарина. Очень ценил Дарина!