AspNetCore(一)

程序的生命周期

1、程序的启动

在.NetCore中无论是Web项目还是控制台应用程序,启动的地方都是在Program类中的Main方法。

创建一个空Web项目可以看到Program如下(3.1版本):


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

                });

    }

  • CreateDefaultBuilder 创建一个默认的WebHost

  • ConfigureWebHostDefaults 配置默认的WebHost

  • UseStartup 启动WebHost后执行Startup

  • Build 生成

  • Run 运行

2、Startup类

在Startup类中最重要的两个方法是:

  • ConfigureServices 配置注入服务

  • Configure 配置中间件

其中Configure是必须要有的,而Startup也是非必须的,也可以把Configure写在Program类中:


public static IHostBuilder CreateHostBuilder(string[] args) =>

            Host.CreateDefaultBuilder(args)

                .ConfigureWebHostDefaults(webBuilder =>

                {

                    webBuilder.Configure(app=> {

                        app.Run(async (context) =>

                        {

                            await context.Response.WriteAsync("Hello World!");

                        });

                    });

                });

两者的区别在于配置的时间不同,一个实在WebHost实例化之前,一个在之后,所以在实例化之前,很多东西都还没有创建,只有最基本的参数IApplicationBuilder。

3、IHostApplicationLifetime

在2.x中是IApplicationLifetime,但是在3.x中已经废弃了。

IHostApplicationLifetime是用来监听WebHost的启动停止等操作的。

F12查看源代码,可以看到:

IApplicationLifetime
  • ApplicationStarted 启动WebHost完成触发

  • ApplicationStopping 结束WebHost时触发

  • ApplicationStopped 结束WebHost完成后触发

  • StopApplication 主动停止WebHost

写一个实例查看一下:


  public void Configure(IApplicationBuilder app, IHostApplicationLifetime applicationLifetime)

        {

            applicationLifetime.ApplicationStarted.Register(()=> {

                Console.WriteLine("WebHost启动完毕触发");

            });

            applicationLifetime.ApplicationStopping.Register(() => {

                Console.WriteLine("WebHost结束时触发");

            });

            applicationLifetime.ApplicationStopped.Register(() => {

                Console.WriteLine("WebHost结束完毕触发");

            });

            app.Run(async context => {

                await context.Response.WriteAsync("Hello World!");

                // 主动结束

                applicationLifetime.StopApplication();

            });

        }

执行结果:

执行结果

大致的生命周期为:

生命周期

你可能感兴趣的:(AspNetCore(一))