• asp net core 3.1启动过程源码解读


    一:与以前的asp.net区别

    •    代码开源了,不需要反编译了,随时随地调试源码
    •     以应用程序方式启动,而不是直接建立一个web网站
    •     asp.net是全家桶的方式,而net core是以自选套餐形式,定义了基础的一些组件后,当你需要用什么类库的时候就得自己去引用或者造轮子(当然,一般都很少机会造)
    •     asp.net配置文件是.config ,而net core是.json(默认加载appsettings.json,也可以自定义指定)
    •     很多地方默认实现了IOC和DI,反正就是无处不在的IOC和DI,使程序编程更加灵活多变

           总的来说:轻量化、灵活多变、开源、跨平台

    二:与netcore 2.x版本区别

             具体请看官网: https://docs.microsoft.com/zh-cn/aspnet/core/release-notes/aspnetcore-3.0?view=aspnetcore-3.1#generic-host

             我个人觉得最明显的就2个地方:一个是默认使用的序列化改成 System.Text.Json  另外一个就是通用主机 ,可以让我们自定义服务,用来承载任何服务

    三:创建项目后自动生成的代码启动过程源码解读

           先看代码,这是一个web api的项目,默认实现了一些方法

           

      public class Program
        {
            public static void Main(string[] args)
            {
                CreateHostBuilder(args)
    .Build()//创建host宿主
    .Run();//运行程序 }
    public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)//创建IHostBuilderhost对象,读取默认配置 .ConfigureWebHostDefaults(webBuilder =>//注册默认服务 { webBuilder.UseStartup<Startup>(); }) ; }

       从上面的代码执行顺序可以看到先创建一个IHostBuilder抽象对象,然后执行读取默认配置方法,然后注册一系列服务,最后创建host宿主,运行程序。

       接下来可以拆分步骤解读源码

          1. 创建IHostBuilderhost宿主,读取默认配置,从源码上我们可以看到 执行顺序,里面我也加了一些注释(Microsoft.Extensions.Hosting.Host类)

            

        2.注册一系列服务(ConfigureWebHostDefaults这个方法),里面主要做了以下这些事(Microsoft.Extensions.Hosting.GenericHostBuilderExtensions类)  

          

            a.调用WebHost.ConfigureWebDefaults方法,注册web宿主,这里面就是注册一系列默认的服务(Microsoft.AspNetCore.WebHost )

       

                     

                b.读取扩展的委托

           

         3.创建host宿主(Microsoft.Extensions.Hosting.HostBuilder)

         

                

      ps:从上面Build方法的源码可以看出来,启动是有顺序的,所以Startup 这个类不是必要的,因为Startup里面就2个方法(ConfigureService和Config),也就是对应上面源码的CreateServiceProvider()方法,它只是让代码结构看起来更加合理

     

          

  • 相关阅读:
    详解ASP.NET的内置对象
    如何架设FTP服务器
    输出JSON问题
    new , virtual , override
    Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)
    Java回顾之I/O
    数据结构之栈和队列
    Java回顾之多线程同步
    设计模式之行为型模式
    Java回顾之网络通信
  • 原文地址:https://www.cnblogs.com/mc-hui/p/12575685.html
Copyright © 2020-2023  润新知