繁体   English   中英

在ASP.NET MVC的CustomControllerFactory中,控制器的动作在哪里执行?

[英]Where are Controllers' actions executed in a CustomControllerFactory in ASP.NET MVC?

我正在学习ASP.NET MVC,我只是为了了解应用程序流程而创建了一个自定义控制器工厂。

以下是我的自定义控制器工厂的代码。

我的问题是,虽然在此操作中未调用控制器的操作,但确实可以执行该操作。 它如何发生以及在何处发生?

当我不从工厂调用时,如何执行Index操作?

using System.Web.Routing;
using System.Web.SessionState;

public class CustomControllerFactory : IControllerFactory
{
    public IController CreateController(
        RequestContext requestContext, 
        string controllerName)
    {
        Type targetType = null;
        switch (controllerName)
        {
            case "first":
            case "home":
                targetType = typeof(FirstController);
                break;
            case "second":
                targetType = typeof(SecondController);
                break;
        }
        var typ = targetType.GetType();
        return Activator.CreateInstance(targetType) as IController;
    }

    public SessionStateBehavior GetControllerSessionBehavior(
        RequestContext requestContext, 
        string controllerName)
    {
        return System.Web.SessionState.SessionStateBehavior.Default;
    }

    public void ReleaseController(IController controller)
    {
        IDisposable dispose = controller as IDisposable;
        if(dispose!= null)
        dispose.Dispose();
    }
}

而我的FirstController代码如下:

public class FirstController : Controller
{
    //
    // GET: /First/
    public ActionResult Index()
    {
        return Content("first cotnroller");
    }
}

ControllerFactory仅负责创建所讨论的控制器的实例,通常是实现DI变量以实例化控制器的地方。

执行动作是请求执行流程中的下一步。 它由ControllerActionInvoker通过InvokeAction方法完成

public virtual bool InvokeAction(
    ControllerContext controllerContext,
    string actionName
)

如图所示,该控件随提供了controllerContext提供,该实例提供控制器类的实例(即FirstController )以及要执行的操作的名称,在本例中为"Index"

如果您还希望实现ActionInvoker的自定义版本,则可以通过实现IActionInvoker接口 ,并将每个控制器的ActionInvoker属性设置为CustomActionInvoker的实例来实现。

this.ActionInvoker = new CustomActionInvoker();

在控制器的构造函数中(也许在所有其他控制器继承的BaseController构造函数中)。

有关ASP.NET MVC应用程序的整个执行流程,请参考此答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM