Неправильно сохраненное состояние экземпляра в Action Filter - PullRequest
4 голосов
/ 04 января 2012

Я только что обновил свой проект с ASP.NET MVC1.0 до ASP.NET MVC4.0

Одна вещь, которая меня действительно пугает, это следующее предложение в документации по обновлению до MVC3.0

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

Я думаю, что нет простого способа проверить ошибки, вызванные неправильно сохраненным состоянием экземпляра.Если у меня есть проблема, я уверен, что я найду ее только в производстве.

Что в действительности означает неправильно сохраненное состояние экземпляра?

У меня есть этот код:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
   ProductModel productModel = new ProductModel()
   filterContext.ActionParameters["model"] = productModel;
}

Это образец неправильно сохраненного состояния экземпляра?

1 Ответ

5 голосов
/ 04 января 2012

Нет, ваш фрагмент кода в порядке. Неправильно сохраненное состояние будет некоторыми свойствами уровня класса, например:

public class StatefulActionFilter : ActionFilter
{
  private readonly IPrincipal currentPrincipal = Thread.CurrentPrincipal;

  public override void OnActionExecuting(ActionExecutingContext filterContext)
  {
    ...
    // Using currentPrincipal here would be bad, since it may refer to the principal of a previous request.
    ...
  }
}
...