本文主要讲的是Asp.Net Core的启动过程,帮助你们掌握应用程序的关键配置点。html
这里面能够看到有两个关键的类。 一个Program,一个stsrtupweb
Program里面有一个Main函数,Main函数里面会调用咱们的CreateHosbuilder这个方法,CreateHosbuilder里面返回了一个IHostBuilder,那么IHostBuilder就是咱们应用程序启动的核心接口app
这个接口主要有6个方法这里面咱们须要关注的是:ConfigureAppConfiguration、ConfigureHostConfiguration、和ConfigureServices框架
为了演示整个应用程序的启动过程咱们回到Program,修改CreateHostBuilder 在里面添加一些代码,把方法名打印出来 函数
public class Program { public static void Main(string[] args) { Console.WriteLine("Hello World!"); CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) //委托入参是:IConfigurationBuilder .ConfigureAppConfiguration(builder => { Console.WriteLine("ConfigureAppConfiguration"); }) //入参 IServiceCollection .ConfigureServices(services => { Console.WriteLine("ConfigureServices"); }) //入参IConfigurationBuilder .ConfigureHostConfiguration(builder => { Console.WriteLine("ConfigureHostConfiguration"); }) //入参 IWebHostBuilder .ConfigureWebHostDefaults(webBuilder => { Console.WriteLine("ConfigureWebHostDefaults"); webBuilder.UseStartup<Startup>(); }); }
Starup里面的主要有三个方法 构造行数、ConfigureServices、Configure 一样的打印出来ui
public class Startup { public Startup(IConfiguration configuration) { Console.WriteLine("Startup构造函数"); Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { Console.WriteLine("Startup.ConfigureServices"); services.AddControllers(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { Console.WriteLine("Startup.Configure"); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } }
启动应用程序看看,顺序我标注在下面了,Starup里面的是按顺序启动的spa
若是应用程序启动起来没有输出控制台的修改一下启动 选择项目名称 不要选择IIS 我在次研究了半天哈哈3d
修改一下里面顺序看看,能够发现执行的顺序与以前略微不一样,就是ConfigureService这一行跑到了Startup.ConfigureServices以后。code
这些委托注册进去以后都是按必定顺序来执行的htm
整个启动过程分为5个阶段:
这个阶段注册了咱们应用程序必要的几个组件,好比说配置的组件、容器的组件
它是用来配置咱们应用程序启动时必要的配置。好比说咱们应用程序启动时所须要的监听的端口、咱们须要监听的Url地址这些。在这个过程咱们能够嵌入一些咱们本身的配置内容注入到咱们的配置的框架中去
是让咱们来嵌入咱们本身的配置文件供应用程序来读取,这些配置未来就会在后续的应用程序执行过程当中间每一个组件读取
这些的话都是用来往容器里面注入咱们的应用的组件
是咱们用来注入咱们的中间件,处理HttpContext整个请求过程的
Startup这个类其实不是必要的,在Progarm里面也能够配置,
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) //入参 IWebHostBuilder .ConfigureWebHostDefaults(webBuilder => { Console.WriteLine("ConfigureWebHostDefaults"); // webBuilder.UseStartup<Startup>(); webBuilder.ConfigureServices(services =>//对等Startup里面的Startup.ConfigureServices { services.AddControllers(); }) .Configure(app =>// 对等Startup里面的Startup.Configure { //if (env.IsDevelopment()) //{ // app.UseDeveloperExceptionPage(); //} app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }); }) //入参 IServiceCollection .ConfigureServices(services => { Console.WriteLine("ConfigureServices"); }) //委托入参是:IConfigurationBuilder .ConfigureAppConfiguration(builder => { Console.WriteLine("ConfigureAppConfiguration"); }) //入参IConfigurationBuilder .ConfigureHostConfiguration(builder => { Console.WriteLine("ConfigureHostConfiguration"); }) ;
这样应用程序同样的能够启动起来 这只是为了规范建议仍是留着哈哈
记得添加命名空间
using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection;