您的位置:网站首页 > asp源码 > 正文

Core MVC 源码学习:MVC 启动流程详解

类别:asp源码 日期:2017-9-29 23:40:42 人气: 来源:

  在 文章中,我们学习了 ASP.NET Core MVC 的由模块,那么在本篇文章中,主要是对 ASP.NET Core MVC 启动流程的一个学习。

  ASP.NET Core 是新一代的 ASP.NET 应用程序,它是跨平台的,并且不依赖于 IIS,新的 MVC Core 设计加入了依赖注入和模块化的 Http 处理管道,这篇文章我们一起通过源码看一下它的启动过程,每一步都很重要。

  我们今天的主题是MVC 框架,所以针对 ASP.NET Core Host 和 Server 的初始化流程就不详细了,由兴趣的同学可以翻看一下我的文章。

  在 Startup 启动的时候,会在 ConfigureServices 中注册 AddMvc 的 DI 服务,那么MVC也是在这个时候注入到DI容器中的,在MVC中所有的注入都是使用 TryAddX 的形式,也就是如果容器中已经有相关服务的话,将不会添加新注册的服务,所以如果你有一些服务需要进行重写的话,需要在 builder.AddMvc() 之前注册到DI中。

  它是 MVC Core 中引用的一个抽象的概念,它允许你一些特性或者一些已知的资源,比如一些元数据信息,发布的资源,磁盘的文件等。

  其实就是在 MVC 框架启动的时候,首先会把 Assembly 程序集转换为 ApplicationPart 添加到 ApplicationPartManager 对象列表中,才能执行后续的任务,因为要从这些程序集中查找 Controller,那么从这个特性我们可以延伸到, 利用此功能,我们可以从 Web 层剥离 Controller 到其他程序集中。

  下面是 AddMvc 的内部函数列表,它将每一个模块相关的服务封装成了一个 AddX 的拓展函数。

  根据命名我们可以看到,它是MVC的核心服务,下面是一张图,罗列出了 MvcCore 内部注册的一些注册的接口,我们可以看到,有非常的多。

  ActionDeor:这个可能大家比较熟悉,它封装了Action上下文的很多信息,也就是Action的描述符。

  IActionSelector:我们知道,当一个由到我们MVC系统的时候,有可能这个由会匹配到多个Action与其相符合,那么如何选着最合适的由处理程序呢? 这个接口主要封装了相关逻辑。

  经过 github 的 issue 印证,这并不是 bug,而是设计如此。开发团队在实现这一块的功能的时候,AddX 的 设计策略就是会自动添加依赖的服务,因为这样比较更加友好,这种形式对于添加什么服务也更加的明确。 当然他们也讲到,将很多的碎片服务再进行碎片的细分常复杂的,有时候会有点不切实际,所以此处不得不如此。

  JSON Patch 是一个用来描述 JSON 文档变化的格式,它本身也是 JSON 文档。它可以用于避免在只有一个节点更改时发送整个文档。当与HTTP PATCH方法组合使用时,它允许以符合标准的方式对HTTP API进行部分更新。例如:

  UseMvc 的主要过程是Router中间件的初始化和启动过程,关于Router中间件可以看一下我的,执行流程如下:

  本篇文章主要是根据源码分析了 MVC 中间件在启动的过程中都注册了哪些服务,以及这些服务在MVC构建的过程中都起到了什么作用,

  那么他是怎么和Router中间件进行配合的呢?我们下一篇来分析 Controller Action 的激活,和 MVC 的执行流程。

  推荐:

  

关键词:asp源码修攻
0
0
0
0
0
0
0
0
下一篇:没有资料

相关阅读

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

CopyRight 2002-2012 技术支持 源码吧 FXT All Rights Reserved

赞助合作: