Пустой ControllerContext в моем пользовательском контроллере, наследовавшемся BaseController

Я создал свой собственный Класс контроллера, который наследовался BaseController. Однако ControllerContext в конструкторе является "пустым". Где я должен указать ControllerContext?

7
задан Robert MacLean 21 February 2013 в 01:45
поделиться

1 ответ

Свойство ControllerContext не присваивается ни одному из базовых конструкторов в вашей иерархии наследования. Контроллер создается фабрикой контроллеров и передается обратно без присвоения свойства ControllerContext.

Используя Reflector, мы можем посмотреть, где происходит присвоение:

protected virtual void Initialize(RequestContext requestContext)
{
    this.ControllerContext = new ControllerContext(requestContext, this);
}

Метод Initialize вызывается из виртуального вызова метода Execute:

protected virtual void Execute(RequestContext requestContext)
{
    if (requestContext == null)
    {
        throw new ArgumentNullException("requestContext");
    }
    this.VerifyExecuteCalledOnce();
    this.Initialize(requestContext);
    this.ExecuteCore();
}

Это означает, что самый ранний момент, когда вы можете получить доступ к свойству ControllerContext - это переопределение метода Execute или Initialize (но вызов base. Execute или base.Initialize сначала):

protected override void Execute(RequestContext requestContext)
{
  base.Execute(requestContext);

  // .ControllerContext is available from this point forward.
}

protected override void Initialize(RequestContext requestContext)
{
  base.Initialize(requestContext);

  // .ControllerContext is available from this point forward.
}

Последний (Initialize) является абсолютно самой ранней точкой, в которой вы можете использовать свойство ControllerContext, если только вы не обработали присвоение самостоятельно, что не рекомендуется (так как части фреймворка будут зависеть от наличия этого свойства в то время).

Надеюсь, это поможет.

22
ответ дан 6 December 2019 в 08:14
поделиться
Другие вопросы по тегам:

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