zoukankan      html  css  js  c++  java
  • 【.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中

  • 相关阅读:
    一篇文章教会你在Windows和Linux系统下搭建Nginx
    【红日安全-VulnStack】ATT&CK实战系列——红队实战(二)
    绕过WAF进行常见Web漏洞利用
    Mac mysql 5.7.x 设置服务开机自启动
    Mac mysql 5.7启动报错,解决之道 The server quit without updating PID file
    阿里云Centos7 安装mysql5.7 报错:./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
    Python 反序列化漏洞学习笔记
    Jmeter二次开发——基于Java请求
    环境篇:Atlas2.1.0兼容CDH6.3.2部署
    synchronized 是王的后宫总管,线程是王妃
  • 原文地址:https://www.cnblogs.com/c-supreme/p/12459414.html
Copyright © 2011-2022 走看看