你好呀~欢迎关注微信公众号:python入门到放弃

AspNetCore(一)

.NetCore admin 416浏览

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

执行结果:

执行结果
执行结果

大致的生命周期为:
生命周期
生命周期

Over………………………

转载请注明: 十三 » AspNetCore(一)

喜欢 (1) or 分享 ( 0)