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