第一节 StartUp:理解程序的启动过程
创建一个ASP.NET Core Web 项目, 可以看到两个核心类 Program 和 StartUp,在Program的Main方法中调用了CreateHostBuilder方法,并返回了一个IHostBuilder接口,这个接口是承载整个项目的核心接口。
在CreateHostBuilder方法中,在Build Host过程中的ConfigureWebHostDefaults方法调用了另一个核心类StartUp,
其实所有的配置均可以在Program中进行设置,调用另一个核心类StartUp能更好的管理代码结构
在整个执行过程中,方法的执行是按照一定的顺序执行的,比如下面代码,并不会按照自己编写代码的顺序去执行委托函数,而是以一个固定的顺序去执行
Program.CreateHostBuilder定义如下
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureHostConfiguration(configurationBuilder => { Console.WriteLine("执行方法:ConfigureHostConfiguration"); }) .ConfigureServices(services => { Console.WriteLine("执行方法:ConfigureServices"); }) .ConfigureLogging(loggingBuilder => { Console.WriteLine("执行方法:ConfigureLogging"); }) .ConfigureAppConfiguration((hostBuilderContext, configurationBinder) => { Console.WriteLine("执行方法:ConfigureAppConfiguration"); }) .ConfigureWebHostDefaults(webBuilder => { Console.WriteLine("执行方法:ConfigureWebHostDefaults"); webBuilder.UseStartup<Startup>(); });
StartUp方法定义如下
public Startup(IConfiguration configuration) { Console.WriteLine("执行方法:Startup"); Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { Console.WriteLine("执行方法:Startup.ConfigureServices"); services.AddControllers(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 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(); }); }
执行结果如下图
可见执行结果是按照 特定的顺序执行的,并不会因为调用接口的先后而改变执行顺序
这个执行顺序也说明一点,在使用第三方日志框架时,是在CreateHostBuilder方法中进行替换,而不是在StartUp中