前言
在介绍生命周期的文章中已经谈过,程序是的入口是Program.cs的main方法。其中,有一个进入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.在 Program 的 CreateDefaultBuilder 方法中用建造者模式创建一个 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 和重定向请求的支持