【NET】.NET基础篇-4.启动流程之WebApplicationBuilder 梦入神机

如果你还记得,那么你就会记得,上篇文章提到的启动流程中的1个对象5个成员和5个成员的4个步骤;透过屏幕我看到你眼神左上尝试回忆了,看下面:
主谋WebApplicationBuilder:
团伙成员:

  • Configuration:负责应用的配置管理;
  • Service:负责注册服务;
  • Environment:负责当前运行环境的信息和配置能力;
  • Logging:负责日志相关;
  • WebHost/Host:负责Web主机和通用主机的配置;
    通过步骤:
  1. 初始化WebApplicationBuilder;
  2. 5个成员分别实例化;
  3. 实例化WebApplication-关键词:build;
  4. app.Run()-关键词:Run;完成WebApplication主体装配并启动,使用.NET成为轻量级,高扩展,跨平台高性能/高并发,具备身份认证与授权和可观察性与诊断的悍匪服务开发团伙。
    后续文章会通过以上4个步骤详细逐步介绍每个成员和其作用,结合.NET8源码尝试介绍其底层逻辑。只有参见本质,才能梦入神机,让知识成为痔疮,只要你坐着工作或者学习,它就会永远和你在一起(噶不净的)。

1. WebApplilcationBuilder

1.1 你是什么身份

人是人妈生的,妖是妖妈生的,WebApplicationBuilder是WebApplication生的。

var builder = WebApplication.CreateBuilder(args);

如果说响应流程的带头大哥是Kestrel,那么WebApplicationBuilder就是启动流程的方丈老秃驴,但江湖有江湖的规矩,它也只不过是WebApplication的白手套。

1.2 为何而生

WebApplicationBuilder说白了不过是一个主机构造器,是构建主机的配置中枢,字面意思,它就是个臭给WebApplication收集程序运行所需配置的。它是一个聚合型的配置对象,负责在启动前完成所有基础设施的搭建:统一并简化主机配置、服务注册和日志构建、容器初始化和HttpPipeline初始化–再说就漏了:就是通过那5个成员完成各自的配置收集。在.NET5及之前的版本中,主要使用WebHost(ASP.NET Core2.x-5.x)和后来的Generic Host(.NET Core 3.x+)。典型的代码启动如下:

Public class Startup {  
public void ConfigureServices(IServiceCollection services) { ... }  
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { ... }}
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>();          
});      
}

这么做的问题:

  1. 模板代码过多:即使是一个空项目,也需要多个文件和大量的using语句;
  2. 概念复杂:IHostBuilder,IWebHostBuilder,Startup类及其ConfigureServices和Configure方法,你就烦吧;
  3. 灵活性受限:Startup类的使用是强制性的,虽然可以通过其他方式配置,但标准模式固定;而WebApplicationBuilder这个好大儿就不一样了:更统一,更精简,也更优雅。
builder.Configuration
builder.Servicesbuilder.Environment
builder.Loggingbuilder.WebHost/builder.Host...app.Run();

(指着敖丙)这个才是哪吒吧。你气不气。1.2 过来坐腿上,让我好好看看源码自己扒拉:https://github.com/dotnet/aspnetcore下载aspnetcore:

在这里插入图片描述
Visual Studio 2022打开并找到:
在这里插入图片描述
想要编译通过可能要花点功夫,当前我报错提示需要VS17.16版本,而我的是17.14,今晚我是升级不了一点。"今夜你会不会来,你滴爱还在不在~~"打开WebApplication.cs找到CreateBuilder函数,用args重载的那个:
在这里插入图片描述
直接初始化并返回了,跳到WebApplicationBuilder.cs,找到那个五个哥:
在这里插入图片描述
public属性,看注释,说人话就是给开发者自己玩儿的,就这个:

builder.Configuration
builder.Services
builder.Environment
builder.Loggingbuilder.WebHost/builder.Host

然后这些东西都给了_hostApplicationBuilder;

  • _hostApplicationBuilder作为参数初始化了BootstrapHostBuilder,得到bootstrapHostBuilder;
  • bootstrapHostBuilder作为参数初始化了_genericWebHostServiceDescriptor;

在这里插入图片描述
这么一路下去,最后在Build方法中初始化了WebApplication:
在这里插入图片描述
就是我们4个步骤中的第三步,实例化WebApplication。
发现了,这么讲源码要想全讲会累死人。以后只提一提重要的点。嗯,刚才还是年轻了一点。
看了源码你会发现,WebApplicationBuilder就是一个被复制后实例化的对象,用作后续的准备。一切都是这么的自然~

2. WebApplication

2.1 说到WebApplication不说了,下次再说吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值