.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>();
方法,那么我们深入这个方法看一下:
未完待续。。。
上一篇: CSS学习之选择器及其优先级