# AspNetCore启动流程概述


aspnetcore 应用程序，是一个拥有内置的Self-hosted的WebServer,用于处理外部请求。大部分情况下以控制台应用的方式实现子托管（Self-Hosted）。
相对于传统的aspnet 提供的大而全的设计，aspnetcore以最小化抽象设计为原则，以扩展(中间件)方式提供的易用性扩展来实现更高程度的按需使用。
在ASP.NET Core应用中通过配置并启动一个Host来完成应用程序的启动和其生命周期的管理。而Host的主要的职责就是Web Server的配置和Pilpeline（请求处理管道）的构建。
在应用中主要通过 构造一个IHostBuilder 的抽象对象来负责(通过build()方法)创建一个Ihost实例。并最终通过Ihost下的run()方法来启动这个实例。

```
IHostBuilder > IHost>Run()
```

期间设计两个核心的概念IHostbuilder和Ihost
# IHostBuilder
可以理解为为了启动host而准备的一些配置文件或行为，提供默认注册行为CreateDefaultBuilder和相关扩展ConfigureWebHostDefaults，以及其他一些配置入口。
### CreateDefaultBuilder相关
大部分都是配置系统相关的api
- UseContentRoot
- ConfigureHostConfiguration
- ConfigureAppConfiguration
- ConfigureLogging
- UseDefaultServiceProvider
### ConfigureWebHostDefaults 
配置webserver的默认行为
- UseStaticWebAssets
- UseKestrel/UseIIS
- ConfigureServices 服务中间件的注册，包括路由中间件
- UseStartup 程序Startup 启动，该启动类中可以注册中间件、扩展第三方中间件，以及相关应用程序配置的处理等

# Build()
核心要素
- BuildHostConfiguration();->围绕ConfigureHostConfiguration的一系列配置回调->执行ConfigureHostConfiguration
- CreateHostingEnvironment();-> HostingEnvironment环境相关配置
- CreateHostBuilderContext();-> HostBuilder 上下文构建，这个略复杂
- BuildAppConfiguration();->围绕ConfigureAppConfiguration的一系列回调->执行ConfigureAppConfiguration；
- CreateServiceProvider();>服务注册添加，并执行ConfigureServices添加的一系列回调->执行ConfigureServices；
