Ваши классы Controller имеют только жизненный цикл, который простирается от запроса-действия до визуализации представления. Вам действительно нужно кэшировать эти данные? Просто предоставьте данные в вашем объекте Model. Запросы не кажутся достаточно сложными, и вдобавок к этому большинство поставщиков РСУБД, как правило, выполняют много операций кэширования запросов самостоятельно.
HTTP - это протокол без сохранения состояния, означающий, что после запроса ваш веб-сервер забывает все об указанном запросе. Чтобы обойти это отсутствие состояния, asp.net предлагает объекты Application и Session. Приложение глобально доступно для всех запросов, а Session привязан к одному IP. Размещение каких-либо данных обычно является последним средством или частью схемы для кэширования данных, которые действительно сильно загружаются.
Поток в ASP.NET MVC примерно
- URL запрашивается
- Контроллер называется
- Действие называется
- Действие вызывает модель для данных (имя пользователя / план пользователя)
- Действие устанавливает данные в модели представления
- Действие вызывает желаемое представление с данными в модели представления
- Вид отображается.
Установка данных для модели представления уже является «частной», поэтому я не уверен, откуда берется необходимость в кэшировании. Возможно, я неправильно понимаю вопрос?
Редактировать
Хорошо, сначала прости меня, если мой пост был немного самонадеянным. Я действительно думаю, что ваш код вообще не должен входить в конструктор вашего базового конструктора. Вы не передаете свой контроллер на просмотр в конце концов.
Хорошей практикой является передача типизированных ViewModels. Скажите, что это ваше определение на вашем сайте. Master
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyNS.BaseViewDataModel>" %>
И это определение, скажем, вашей справочной страницы. Просмотр:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyNS.HelpViewDataModel>" %>
Затем вы можете создать BaseViewDataModel
namespace MyNS
{
public class BaseViewDataModel
И ваша HelpViewDataModel
namespace MyNS
{
public class HelpViewDataModel : BaseViewDataModel
{
Тогда в вашей помощи соответствующее действие контроллера
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index()
{
var viewDataModel = new HelpViewDataModel ();
viewDataModel.HelpText = "something";
..
..
return View(viewDataModel);
}
Теперь вы можете создавать экземпляр guid и пользовательского плана в конструкторе BaseViewDataModel, и он будет вызываться только для действий, которые фактически создают подкласс BaseViewDataModel.
А ваши представления безопасны от типов, что значительно повышает производительность, поскольку мы набрали те представления, которые мы теперь можем назвать
<%= this.Model.HelpText %>
В представлении справки.