【.NET Core 开发实战学习笔记】StartUp:理解程序的启动过程

第一节  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中

原文地址:https://www.cnblogs.com/c-supreme/p/12459414.html