ASP.NET сессия MVC по сравнению с глобальным по сравнению с кэшем

Самый простой способ:

  1. Зайдите в свой конструктор пользовательских интерфейсов,

  2. выберите UITextField и «Control-Drag» для «Деталь View Controller-Detail» и выпуск.

  3. Откроется окно. Затем в разделе «Розетки» выберите «Делегат».

Вот и все. Это сработало для меня.

7
задан John Gietzen 27 May 2009 в 12:32
поделиться

4 ответа

Ваша база данных будет базовым классом для ваших контроллеров. Этот базовый класс должен расширять Controller, а все ваши контроллеры должны расширять базовый класс. Вот небольшой пример:

public class BaseController : Controller
{
    private AuthServices _auth;
    private LogHelper _log;
    private Repository _repository;

    /// <summary>
    /// <see cref="AuthServices"/>
    /// </summary>
    protected AuthServices Authorization
    {
        get { return _auth ?? (_auth = new AuthServices()); }
    }

    /// <summary>
    /// <see cref="LogHelper"/>
    /// </summary>
    protected LogHelper Log
    {
        get { return _log ?? (_log = new LogHelper()); }
    }

    /// <summary>
    /// <see cref="Repository"/>
    /// </summary>
    protected Repository Repository
    {
        get { return _repository ?? (_repository = new Repository()); }
    }
}

Обратите внимание на ленивое создание экземпляра. Это позволяет мне прокрасться перед запуском тестов и установить свои личные поля с помощью моков.

Что касается сеанса, ваш объект User все еще может быть сохранен в сеансе, как в традиционном приложении ASP.NET. Практически все еще есть (Response, Cache, Session и т. Д.), Но некоторые из них были обернуты классами из System.Web.Abstractions, чтобы их можно было смоделировать для тестирования. Все они по-прежнему ведут себя одинаково, хотя некоторые из них не следует использовать в их традиционной роли (например, не Response.Redirect, верните ActionResult, например RedirectToRouteResult, который выполняет ваше перенаправление).

Что касается обоснования ваших вопросов…

Не подчеркивайте единственное соединение с базой данных. В зависимости от вашей реализации это может быть даже плохой идеей, поскольку запросы могут наступать друг на друга. Просто откройте свой Connex, используйте его и удалите / закройте его, когда закончите.

Кроме того, одним из самых больших изменений, которые приносит MVC, является отказ от модели с отслеживанием состояния, которую традиционный ASP.NET пытался привнести в веб-разработку. Все эти рамки и состояния просмотра больше не существуют (не обращайте внимания на человека за занавеской). Чем меньше состояния вы удерживаете, тем менее сложным и надежным является ваше веб-приложение. Попробуйте, может вам понравится.

В зависимости от вашей реализации это может быть даже плохой идеей, поскольку запросы могут наступать друг на друга. Просто откройте свой Connex, используйте его и удалите / закройте его, когда закончите.

Кроме того, одним из самых больших изменений, которые приносит MVC, является отказ от модели с отслеживанием состояния, которую традиционный ASP.NET пытался привнести в веб-разработку. Все эти рамки и состояния просмотра больше не существуют (не обращайте внимания на человека за занавеской). Чем меньше состояния вы удерживаете, тем менее сложным и надежным является ваше веб-приложение. Попробуйте, может вам понравится.

В зависимости от вашей реализации это может быть даже плохой идеей, поскольку запросы могут наступать друг на друга. Просто откройте свой Connex, используйте его и удалите / закройте его, когда закончите.

Кроме того, одним из самых больших изменений, которые приносит MVC, является отказ от модели с отслеживанием состояния, которую традиционный ASP.NET пытался привнести в веб-разработку. Все эти рамки и состояния просмотра больше не существуют (не обращайте внимания на человека за занавеской). Чем меньше состояния вы удерживаете, тем менее сложным и надежным является ваше веб-приложение. Попробуйте, может вам понравится.

Все эти рамки и состояния просмотра больше не существуют (не обращайте внимания на человека за занавеской). Чем меньше состояния вы удерживаете, тем менее сложным и надежным является ваше веб-приложение. Попробуйте, может вам понравится.

Все эти рамки и состояния просмотра больше не существуют (не обращайте внимания на человека за занавеской). Чем меньше состояния вы удерживаете, тем менее сложным и надежным является ваше веб-приложение. Попробуйте, может вам понравится.

10
ответ дан 6 December 2019 в 12:54
поделиться

Если вы используете сеансы, я бы рекомендовал иметь класс сеанса, чтобы вам нужно было указать имя строки только один раз в коде, и это также даст вам IntelliSence.

 public static class SessionHandler
{   
    // User Values
    private static string _userID = "UserID";
    private static string _userRole = "UserRole";

    public static string UserID
    {
        get
        {
            if (HttpContext.Current.Session[SessionHandler._userID] == null)
            { return string.Empty; }
            else
            { return HttpContext.Current.Session[SessionHandler._userID].ToString(); }
        }
        set
        { HttpContext.Current.Session[SessionHandler._userID] = value; }

    }

    public static string UserRole
    {
        get
        {
            if (HttpContext.Current.Session[SessionHandler._userRole] == null)
            { return string.Empty; }
            else
            { return HttpContext.Current.Session[SessionHandler._userRole].ToString(); }
        }
        set
        { HttpContext.Current.Session[SessionHandler._userRole] = value; }

    }
}
3
ответ дан 6 December 2019 в 12:54
поделиться

Сеансы вообще не изменились в MVC. Класс GlobalApplication в Global.asax тоже существует. Также существуют страницы, которые вы хотели бы ссылаться на репозиторий в контроллере, а не на страницу. Добавление свойства в базовый класс контроллера - нормально; Я делаю это все время.

2
ответ дан 6 December 2019 в 12:54
поделиться

Вы можете создать связующее звено модели для инкапсуляции состояния.

(См. книгу Стива Сандерсона о реализации корзины в mvc)

С помощью связующего элемента модели вы получаете доступ к controllerContext - который имеет HttpContext.

1
ответ дан 6 December 2019 в 12:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: