xp框架如何激活 ASP.NET MVC 4框架揭秘:Controller的激活与URL路由[2]
ASP.NET MVC 4框架揭秘:Controller的激活与URL路由[2]
public class MvcHandler : IHttpAsyncHandler IHttpHandler IRequiresSessionState
{
//其他成员
public RequestContext RequestContext { get; private set; }
public bool IsReusable
{
get { return false; }
}
public MvcHandler(RequestContext requestContext)
{
this RequestContext = requestContext;
}
IAsyncResult BeginProcessRequest(HttpContext context AsyncCallback cb
object extraData)
{
IControllerFactory controllerFactory =
ControllerBuilder Current GetControllerFactory()
string controllerName =
this RequestContext RouteData GetRequiredString( controller )
IController controller = controllerFactory
CreateController(this RequestContext controllerName)
if (controller is IAsyncController)
{
try
{
//调用BeginExecute/EndExecute方法以异步的方式执行Controller
}
![xp框架如何激活 ASP.NET MVC 4框架揭秘:Controller的激活与URL路由[2]](http://img.zhputi.com/uploads/d44a/d44a1da8a38ed3a42a5a4545d9a17ce449779.jpg)
finally
{
controllerFactory ReleaseController(controller)
}
}
else
{
try
{
//调用Execute方法以异步的方式执行Controller
}
finally
{
controllerFactory ReleaseController(controller)
}
}
}
}
由于MvcHandler同时实现了IHttpHandler和IHttpAsyncHandler接口 所以它总是以异步的方式被执行(调用BeginProcessRequest/EndProcessRequest方法) BeginProcessRequest方法通过RequestContext对象得到目标Controller的名称 然后利用当前ControllerBuilder创建的ControllerFactory激活Controller对象 如果Controller类型实现了IAsyncController接口 则以异步的方式执行Controller 否则采用同步执行方式 在被激活Controller对象被执行之后 MvcHandler会调用ControllerFactory的ReleaseController对其进行释放清理工作
返回目录ASP NET MVC 框架揭秘
编辑推荐
ASP NET开发培训视频教程
Microsoft NET框架程序设计视频教程
Java程序性能优化 让你的Java程序更快 更稳定
Visual C++音频/视频技术开发与实战
lishixinzhi/Article/program/net/201311/16087