我试图了解如何在 mvc 中调用控制器和操作。经过大量阅读,我发现 ExecuteCore() 方法被执行,该方法存在于 Controller.cs 类中。
protected override void ExecuteCore()
{
// If code in this method needs to be updated, please also check the BeginExecuteCore() and
// EndExecuteCore() methods of AsyncController to see if that code also must be updated.
PossiblyLoadTempData();
try
{
string actionName = RouteData.GetRequiredString("action");
if (!ActionInvoker.InvokeAction(ControllerContext, actionName))
{
HandleUnknownAction(actionName);
}
}
finally
{
PossiblySaveTempData();
}
}
public IActionInvoker ActionInvoker
{
get
{
if (_actionInvoker == null)
{
_actionInvoker = CreateActionInvoker();
}
return _actionInvoker;
}
set { _actionInvoker = value; }
}
protected virtual IActionInvoker CreateActionInvoker()
{
// Controller supports asynchronous operations by default.
return Resolver.GetService<IAsyncActionInvoker>() ?? Resolver.GetService<IActionInvoker>() ?? new AsyncControllerActionInvoker();
}
当 ExecuteCore() 开始执行时,对 ActionInvoker 属性的引用会返回一个 IActionInvoker 类型。
IActionInvoker 由 AsyncControllerActionInvoker.cs 类实现,其中实现了 InvokeAction(ControllerContext, actionName) 方法。
所以我的问题是:
- IActionInvoker 接口如何在这里实例化,并由 ActionInvoker 属性返回?
- 对属性的引用是否返回 AsyncControllerActionInvoker 类的对象,以便我们可以使用该对象来调用 InvokeAction(ControllerContext, actionName) 方法。
- 做什么
Resolver.GetService<IAsyncActionInvoker>()
和Resolver.GetService<IActionInvoker>()
做什么?
请帮助我理解这一点。