ASP.NET Core 3 框架剖析 - 生命周期

前言

微软在今年9月份发布了NET Core 3.0,增加如下的重大改进:

  • 使用.NET Core可以开发Windows桌面应用,支持对Winform和WPF(可打包单个应用)
  • 基于span和UTF-8完全重写了JSON APIs,不在依赖于Json.NET
  • 支持在 树莓派 和 ARM 芯片中进行loT开发
  • 垃圾回收采用更少的内存

同时,也发布了 ASP.NET Core 3.0EF Core 3.0 ,本篇文章主要介绍 ASP.NET Core 3.0 中项目的生命周期,并会简述与 ASP.NET Core 2.x 相比的差异性。

请求解析

首先简单了解下ASP.NET Core解析一个HTTP请求的过程,如下图所示:
在这里插入图片描述
图片来之ASP.NET CORE in Action

  1. 发起一个HTTP请求
  2. 请求通过IIS或者Nginx或者Apache到你的ASP.NET Core应用
  3. ASP.NET Core Web服务接收这个HTTP请求,将它交给middleware
  4. middleware处理该请求,并将它交给MVC middleware
  5. MVC middleware生成一个HTML响应
  6. 响应通过middleware返回到Web服务
  7. HTTP响应返回到用户的浏览器

程序入口

ASP.NET Core中,将Program.cs文件的Main()方法作为应用的入口(这点和Console项目、Winform项目是一致的),当你启动你的web应用时这个方法必须存在。在ASP.NET Core 3.0应用中,它被 创建运行 一个IHostBuilder实例,如下面的代码所示:

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

【注意】

  • .NET Core 2.x的Program.cs是创建一个IWebHost,而3.0创建的是一个IHostBuilder
  • .NET Core 2.x的IWebHost的命名空间是Microsoft.AspNetCore.Hosting,而3.0的IHostBuilder命名空间是Microsoft.Extensions.Hosting

CreateHostBuilder()介绍

  • 从环境变量中加载“DOTNET_”前缀的配置
  • 从命令行参数中加载配置
  • 从“appsetting.json”和“appsettings.[ 环境名 ].json”加载配置
  • 如果 [ 环境名 ] 时“Development”时从用户机密(User Secrets)加载配置
  • 从环境变量加载配置
  • 配置ILoggerFactory记录日志
  • [ 环境名 ] 为“Development”时在依赖注入容器中启用范围验证(scope validation)

具体内容可以查看相关源码或参考Host.CreateDefaultBuilder()方法

//Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder()
public static IHostBuilder CreateDefaultBuilder(string[] args)
{
   
   
    HostBuilder hostBuilder = new HostBuilder();
    hostBuilder.UseContentRoot(Directory.GetCurrentDirectory());
    hostBuilder.ConfigureHostConfiguration(delegate (IConfigurationBuilder config) {
   
   
        config.AddEnvironmentVariables("DOTNET_");</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值