美文网首页
AspNetCore(一)

AspNetCore(一)

作者: 小新你蜡笔呢 | 来源:发表于2020-01-19 14:22 被阅读0次

    程序的生命周期

    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<Startup>();
    
                    });
    
        }
    
    
    • 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(一)

          本文链接:https://www.haomeiwen.com/subject/wdurzctx.html