1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > .NET Core开发实战(第4课:Startup:掌握ASP.NET Core的启动过程)--学习笔记

.NET Core开发实战(第4课:Startup:掌握ASP.NET Core的启动过程)--学习笔记

时间:2022-12-10 20:12:57

相关推荐

.NET Core开发实战(第4课:Startup:掌握ASP.NET Core的启动过程)--学习笔记

04 | Startup:掌握 Core的启动过程

新建一个 Core Web 应用程序

选择 API

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>();});}

在 Program.cs 的 Main 函数中

CreateHostBuilder 方法返回了一个 IHostBuilder

它是应用程序启动的核心接口

IHostBuilder 接口有六个方法:

主要关注以下三个:

ConfigureAppConfiguration

ConfigureHostConfiguration

ConfigureServices

接下来,我们添加一些代码演示整个应用程序的启动过程:

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureAppConfiguration(builder =>{Console.WriteLine("ConfigureAppConfiguration");}).ConfigureServices(service =>{Console.WriteLine("ConfigureServices");}).ConfigureHostConfiguration(builder =>{Console.WriteLine("ConfigureHostConfiguration");}).ConfigureWebHostDefaults(webBuilder =>{Console.WriteLine("ConfigureWebHostDefaults");webBuilder.UseStartup<Startup>();});

接着,在 Startup 的三个方法中添加一些代码

public Startup(IConfiguration configuration){Console.WriteLine("Startup");...public void ConfigureServices(IServiceCollection services){Console.WriteLine("ConfigureServices");...public void Configure(IApplicationBuilder app, IWebHostEnvironment env){Console.WriteLine("Configure");...

启动程序查看输出:

ConfigureWebHostDefaultsConfigureHostConfigurationConfigureAppConfigurationConfigureServicesStartupStartup.ConfigureServicesStartup.Configure

调整一下委托的注册顺序

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{Console.WriteLine("ConfigureWebHostDefaults");webBuilder.UseStartup<Startup>();}).ConfigureServices(service =>{Console.WriteLine("ConfigureServices");}).ConfigureAppConfiguration(builder =>{Console.WriteLine("ConfigureAppConfiguration");}).ConfigureHostConfiguration(builder =>{Console.WriteLine("ConfigureHostConfiguration");});

会得到不同的结果

ConfigureWebHostDefaultsConfigureHostConfigurationConfigureAppConfigurationStartupStartup.ConfigureServicesConfigureServicesStartup.Configure

本质上,如果查看源码会发现,委托注册进去之后,实际上是按照一定的顺序来执行的:

1、ConfigureWebHostDefaults

这个阶段注册了应用程序必要的几个组件,比如配置的组件、容器组件

2、ConfigureHostConfiguration

用于配置应用程序启动时必要的配置,比如应用程序启动时所需要监听的端口,URL 地址

在这个过程可以嵌入一些自己配置的内容,注入到配置的框架中

3、ConfigureAppConfiguration

用于嵌入自己的配置文件,供应用程序读取,这些配置将会在后续的应用程序执行过程中间每个组件读取

4、ConfigureServices, ConfigureLogging, Startup, Startup.ConfigureServices

用于往容器里注入应用的组件

5、Startup.Configure

用于注入中间件,处理 HttpContext 整个请求过程

public void Configure(IApplicationBuilder app, IWebHostEnvironment env){Console.WriteLine("Startup.Configure");if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseHttpsRedirection();app.UseRouting();app.UseAuthorization();app.UseFileServer();app.UseWebSockets();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});}

在整个启动的过程中,Startup 这个类不是必要的,只是让代码结构更加合理

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{Console.WriteLine("ConfigureWebHostDefaults");//webBuilder.UseStartup<Startup>();webBuilder.ConfigureServices(services =>{Console.WriteLine("webBuilder.ConfigureServices");services.AddControllers();});webBuilder.Configure(app =>{Console.WriteLine("webBuilder.Configure");app.UseHttpsRedirection();app.UseRouting();app.UseAuthorization();app.UseFileServer();app.UseWebSockets();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});});}).ConfigureServices(service =>{Console.WriteLine("ConfigureServices");}).ConfigureAppConfiguration(builder =>{Console.WriteLine("ConfigureAppConfiguration");}).ConfigureHostConfiguration(builder =>{Console.WriteLine("ConfigureHostConfiguration");});}

启动程序查看输出:

ConfigureWebHostDefaultsConfigureHostConfigurationConfigureAppConfigurationwebBuilder.ConfigureServicesConfigureServiceswebBuilder.Configure

服务注册一般放在 Startup 的 ConfigureServices,一般是services.AddXXX

public void ConfigureServices(IServiceCollection services){services.AddMvc();services.AddAuthentication();services.AddAuthorization();Console.WriteLine("Startup.ConfigureServices");services.AddControllers();}

中间件的注册一般放在 Startup 的 Configure

public void Configure(IApplicationBuilder app, IWebHostEnvironment env){Console.WriteLine("Startup.Configure");if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseHttpsRedirection();app.UseRouting();app.UseAuthorization();app.UseFileServer();app.UseWebSockets();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。