IHostBuilder IHost IHostService IHostApplicationLifetime
WebApplication ==> createbuilder创建了一个新的new WebApplicationBuilder。
WebApplicationBuilder里的初始话方法中,首先会创建一个HostApplicationBuilder对象,HostApplicationBuilder主要用于表示一个Host Application和Service builder用来管理configuration, logging, lifetime等等信息。WebApplicationBuilder里首先会创建ConfigurationManager管理配置,Initialize相关配置,并且通过HostBuilder相关静态方法创建HostBuilderContext,在通过HostBuilder里的PopulateServiceCollection静态方法注册ServiceCollection依赖注入容器需要注册的类型等信息,包括IHost对象,这也是最后WebApplication.Run启动的承载系统,并且向Host构造方法依赖注入的根容器ServiceProvide人的委托方法,,这个委托方法在HostApplicationBuilder中实现
ASP.NET Core 应用针对服务生命周期管理的实现原理其实也很简单。在应用程序正常启动后,它会利用注册的服务创建一个作为根容器的 IServiceProvider 对象,我们可以将它称为ApplicationServices。如果应用在处理某个请求的过程中需要采用依赖注入的方式激活某个服务实例,那么它会利用这个 IServiceProvider对象创建一个代表服务范围的 ServiceScope对象,后者会指定一个 IServiceProvider 对象作为子容器,请求处理过程中所需的服务实例均由它来提供,我们可以将它称为RequestServices。