ASP.NET Core 3 框架剖析 - Startup

前言

在介绍生命周期的文章中已经谈过,程序是的入口是Program.csmain方法。其中,有一个进入Startup的入口,是webBuilder.UseStartup();

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                //这里是进入startup的入口
                webBuilder.UseStartup<Startup>();
            });
}

我们从下图来了解ASP.NET Core中Startup的运行情况
在这里插入图片描述
官方对Startup的定义是这样的:

Startup 类配置服务和应用的请求管道。
这个描述对于不了解Startup的同学来说,说了等于没说,其实就是配置【依赖注入】和【中间件】的,所以在这之前可能需要先搞清楚关于依赖注入和中间件的概念,我们先来看看这个类的结构是什么样子的

public class Startup
{
	//构造方法
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }
    
	//配置服务(依赖注入)
    public void ConfigureServices(IServiceCollection services)
    {
        //默认以services.Add{服务名}命名服务,其含义是就XX服务添加到服务容器中
        //services.AddRazorPages();
    }
    
	//配置(中间件)
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
        	//开发环境出现异常时显示
            ...
        }
        else
        {
        	//非开发环境
            ...
        }
        //
        app.UseStaticFiles();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

说明:
1.在 ProgramCreateDefaultBuilder 方法中用建造者模式创建一个 IHostBuilder 对象
2.WebHostBuilder 调用 Startup 来配置你的应用,其中 ConfigureServices() 方法用来配置依赖注入
3.Configure() 方法用来配置中间件,即你的应用如何响应请求
4.当配置完成,CreateDefaultBuilder 方法会调用Build来创建IHostBuilder对象

ConfigureServices方法

框架为我们提供了很多常用的功能可以在ConfigureServices方法中注入到服务容器中,比方说常见的:

  • AddLocalization —— 添加应用程序本地化所需的服务。
  • AddMemoryCache —— 向 IMemoryCache 中添加 IServiceCollection 的非分布式内存中实现。
  • AddLogging —— 将日志记录服务添加到指定的 IServiceCollection。
  • AddMvc —— 将MVC服务添加到指定的 IServiceCollection,传统MVC项目适用。
  • AddControllers —— 讲控制器添加到指定的 IServiceCollection,不会添加视图或页面,WebAPI项目适用。

注意:
由于服务是 IServiceCollection 的扩展方法,所以asp.net core提供的服务会分散到各个类中,当然专这也就意味着我们自己也可以实现自定义的服务。

Configure方法

configure方法用于配置中间件,中间件简单来说就是一个请求管道,其中包含了一系列的请求委托,依次调用,微软官方文档提供了一个图很直观在这里插入图片描述

注意
从图中可以看到,每个中间件都有一个next()方法,该方法是用来调用下一个中间件的命令,如果中间件中不去调用next()方法,请求就会在该处被中断

框架内置了许多,常用的中间件比方说:

  • UseAuthentication —— 提供身份验证支持,基于Identity
  • UseCors —— 配置跨域资源共享
  • UseExceptionHandler / UseDeveloperExceptionPage —— 提供新应用的开发人员异常页、异常处理、状态代码页和默认网页的几个单独的中间件
  • UserMvc —— 用 MVC/Razor Pages 处理请求
  • UseRequestLocalization —— 提供本地化支持
  • UseSession —— 提供对管理用户会话的支持
  • UseStaticFiles —— 为提供静态文件和目录浏览提供支持
  • UseRewriter —— 提供对重写 URL 和重定向请求的支持
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值