Web API调用请求的目标是定义在某个HttpController类型中的某个Action方法,所以消息处理管道最终需要激活目标HttpController对象。调用请求的URI会携带目标HttpController的名称,该名称经过路由解析之后会作为路由变量保存到一个HttpRouteData对象中,而后者会被添加到代表当前请求的HttpRequestMessage对象的属性字典中。ASP.NET Web API据此解析出目标HttpController的类型,进而实现针对目标HttpController实例的激活。[本文已经同步到《How ASP.NET Web API Works?》]

目录
一、程序集的解析
二、HttpController类型的解析
    1、DefaultHttpControllerTypeResolver
    2、HttpController类型的缓存
三、HttpController的选择
    1、DefaultHttpControllerSelector
    2、获取目标HttpController的名称
    3、建立HttpController名称与HttpControllerDescriptor之间的映射
    4、根据请求选择HttpController
四、HttpController的创建
    1、HttpControllerActivator
    2、DefaultHttpControllerActivator
    3、DependencyResolver
    4、HttpRequestMessage中的DependencyResolver
    5、DependencyResolver在DefaultHttpControllerActivator中的应用

在ASP.NET Web API的HttpController激活系统中,AssembliesResolver为目标HttpController类型解析提供候选的程序集。换句话说,候选HttpController类型的选择范围仅限于定义在由AssembliesResolver提供的程序集中的所有实现了IHttpController接口的类型。所有的AssembliesResolver均实现了接口IAssembliesResolver,该接口定义在命名空间“System.Web.Http.Dispatcher”下,如果未作特别说明,本节新引入的类型均定义在此命名空间下。如下面的代码片断所示,IAssembliesResolver接口中仅仅定义了一个唯一的GetAssemblies方法,该方法返回的正是提供的程序集列表。

interface IAssembliesResolver
   2: {
   3:     ICollection<Assembly> GetAssemblies();
   4: }

相关文章:

  • 2021-11-19
  • 2022-12-23
  • 2022-03-02
  • 2022-12-23
  • 2021-06-19
  • 2021-06-05
  • 2022-01-20
猜你喜欢
  • 2022-12-23
  • 2021-08-08
  • 2022-12-23
  • 2022-12-23
  • 2021-06-04
  • 2022-12-23
相关资源
相似解决方案