欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-29 17:59:04
...

环境:

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

未完待续。。。

相关标签: .netcore