.netcore入门24:aspnetcore源码分析之在通用主机上配置web服务

环境:

  • window 10
  • .netcore 3.1
  • vs2019 16.5.1

说明:
上一篇介绍到了aspnetcore中的通用主机,这个通用主机封装了日志、配置、依赖注入容器等资源,并且里面包括了一些列的主机服务(IHostedService),而web服务就是其中的一个主机服务。这篇就来分析,aspnetcore是怎样将web服务(GenericWebHostService)注入到通用主机中的(Host)。

正文:

通过上篇我们知道,通用主机使用的主要步骤如下:

  • 1.创建主机构建者对象(HostBuilder)
  • 2.将构建逻辑存储到主机构建者对象中
  • 3.调用主机构建者对象的build方法构造出主机对象(Host)
  • 4.启动主机对象Host,Host中的主机服务(IHostedService)也随着启动
  • 5.关闭主机对象Host,Host中的主机服务(IHostedService)也随之关闭

接下来我们仅分析负责web的主机服务(主要是Startup.cs的实例化、ConfigureServices和Configure方法的调用时机),先来看下面代码:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

在上面代码中,我们通过.ConfigureWebHostDefaults(...)将web服务注入进去的,其他的代码都是针对通用主机的,那么我们就调试进入这个方法:
在这里插入图片描述
通过上图可以看出,最终我们创建了一个web主机服务的构造者对象(GenericWebHostBuilder),而这个GenericWebHostBuilder其实就是封装了HostBuilder而已,那么通过GenericWebHostBuilder注入的处理逻辑也就存储到了HostBuilder的_configureHostConfigActions 、_configureAppConfigActions 、_configureServicesActions 中,我们看一下GenericWebHostBuilder的构造函数:
在这里插入图片描述
通过上图,我们应该对“GenericWebHostBuilder其实就是封装了HostBuilder而已”这句话有了直观的理解了。
我们将上面调试代码的执行逻辑梳理一下:
在这里插入图片描述
从上面图可以看到,我们在配置的时候就执行了webBuilder.UseStartup<Startup>();方法,那么我们深入这个方法看一下:

未完待续。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章