作為Controller基類ControllerBase的Execute方法的核心在於對Action方法本身的執行和作為方法返回的ActionResult的執行
ActionInvoker
同樣為ActionInvoker定義了一個接口IactionInvoker
public interface IActionInvoker
{
void InvokeAction(ControllerContext controllerContext
}
ControllerContext類型在真正的ASP
public class ControllerContext
{
public ControllerBase Controller { get; set; }
public RequestContext RequestContext { get; set; }
}
ControllerBase中表示ActionInvoker的同名屬性在構造函數中被初始化
從前面給出的關於ControllerBase的定義中可以看到在構造函數中默認創建的ActionInvoker是一個類型為ControllerActionInvoker的對象
public class ControllerActionInvoker : IActionInvoker
{
public IModelBinder ModelBinder { get; private set; }
public ControllerActionInvoker()
{
this
}
public void InvokeAction(ControllerContext controllerContext
stringactionName)
{
MethodInfo method = controllerContext
List<object> parameters = new List<object>()
foreach (ParameterInfo parameter in method
{
parameters
parameter
}
ActionResult actionResult = method
parameters
actionResult
}
}
ModelBinder
我們為ModelBinder提供了一個簡單的定義
public interface IModelBinder
{
object BindModel(ControllerContext controllerContext
Type modelType)
}
通過前面給出的關於ControllerActionInvoker的定義可以看到
[
From:http://tw.wingwit.com/Article/program/net/201311/16104.html