Я создал свой собственный Класс контроллера, который наследовался BaseController
. Однако ControllerContext
в конструкторе является "пустым". Где я должен указать ControllerContext
?
Свойство 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, если только вы не обработали присвоение самостоятельно, что не рекомендуется (так как части фреймворка будут зависеть от наличия этого свойства в то время).
Надеюсь, это поможет.