前面讲了 ASP.NET Core 的项目结构, 查看完整的 ASP.NET Core 系列文章: https://www.cnblogs.com/zhangweizhong/category/1477144.html
ASP.NET Core 里面一个比较重要的就是 Startup.cs 类, 包括加载配置, 通过依赖注入加载组件, 注册路由等都在此处进行. 今天就来聊一聊 Startup 类的作用和用法.
与 ASP.NET 对比, ASP.NET Core 最显著的变化之一就是配置应用程序的方式, Global.asax,FilterConfig.cs 和 RouteConfig.cs 统统消失了, 取而代之的是 Program.cs 和 Startup.cs.Program.cs 作为 web 应用程序的默认入口, 会自动调用 Startup.cs 中的 ConfigureServices 方法 和 Configure 方法. 大致流程如下图所示:
Startup 类
Startup 类是配置服务和应用的请求管道.
Startup 类的作用:
1. ConfigureServices 方法用于定义 (注册) 应用程序所使用的服务.(如: ASP.NET Core MVC,Entity Framework Core,Identity 等);
2. Configure 方法用于定义请求管道的中间件, 该管道将用于处理应用程序的所有请求.
3. 注册服务添加方法是无序的, ASP.NET Core 在应用程序启动的时候, 只要有相应服务即可, 而注册中间件时方法是有序的, 管道内的每一个组件都可以选择是否将请求交给下一个组件, 并在管道中调用下一个组件之前或之后执行某些操作.
在应用启动时, ASP.NET Core 运行时会调用 ConfigureServices 和 Configure:
- public class Startup
- {
- // 运行时调用此方法. 使用此方法向容器添加服务.
- public void ConfigureServices(IServiceCollection services)
- {
- // 使用此方法向容器添加服务.
- }
- // 运行时调用此方法. 使用此方法配置 HTTP 请求管道.
- public void Configure(IApplicationBuilder App, IHostingEnvironment env)
- {
- // 使用此方法配置 HTTP 请求管道中间件.
- }
- }
Startup 类的构造函数提供注册 config,log,env 等服务:
- public class Startup
- {
- private readonly IHostingEnvironment _env;
- private readonly IConfiguration _config;
- private readonly ILoggerFactory _loggerFactory;
- // 构造函数, 加载配置文件, 注册 log 等
- public Startup(IHostingEnvironment env, IConfiguration config,
- ILoggerFactory loggerFactory)
- {
- _env = env;
- _config = config;
- _loggerFactory = loggerFactory;
- }
- ...
- }
ConfigureServices 方法
方法是可选的; 但是如果使用的话, 它会在 WebHost 的 Configure 方法之前被调用. WebHost 可能会在调用启动方法之前配置一些服务. 按照惯例, 在这个方法中设置配置选项.
对于需要大量设置的功能, 在 IServiceCollection 上添加 Add[Service]扩展方法. 下面示例将应用程序配置为使用 Entity Framework,Identity 和 MVC 的服务:
- public void ConfigureServices(IServiceCollection services)
- {
- // Add framework services.
- services.AddDbContext<ApplicationDbContext>(options =>
- options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
- services.AddIdentity<ApplicationUser, IdentityRole>()
- .AddEntityFrameworkStores<ApplicationDbContext>()
- .AddDefaultTokenProviders();
- services.AddMvc();
- // Add application services.
- services.AddTransient<IEmailSender, AuthMessageSender>();
- services.AddTransient<ISmsSender, AuthMessageSender>();
- }
ConfigureServices 将服务添加到服务容器, 使其在应用和 Configure 方法中可用.
Configure 方法
Configure 方法用于指定 ASP.NET 应用程序如何响应 HTTP 请求. 通过将中间件组件添加到由依赖注入提供的 IApplicationBuilder 实例来配置请求管道.
从下面的例子中, 我们使用了几个扩展方法来配置支持: 异常页和异常处理程序, 静态文件, MVC, 和 Identity 的管道.
- public void Configure(IApplicationBuilder App, IHostingEnvironment env)
- {
- if (env.IsDevelopment())
- {
- App.UseDeveloperExceptionPage();
- }
- else
- {
- App.UseExceptionHandler("/Error");
- App.UseHsts();
- }
- App.UseHttpsRedirection();
- App.UseStaticFiles();
- App.UseCookiePolicy();
- App.UseMvc();
- }
每个 Use 扩展方法将一个或多个中间件组件添加到请求管道. 例如, UseMvc 扩展方法将路由中间件添加到请求管道, 并将 MVC 配置为默认处理程序.
其他服务(如 IHostingEnvironment 和 ILoggerFactory), 也可以在 Configure 方法中指定.
最后
以上就将 Startup 类简单的介绍完了, 还有很多高级功能和用法, 可以继续研究研究.
参考文档: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.2
来源: https://www.cnblogs.com/zhangweizhong/p/11232336.html