ASP.NET Core系列(三):启动类Startup

前面讲了ASP.NET Core 的项目结构,查看完整的ASP.NET Core系列文章:https://www.cnblogs.com/zhangweizhong/category/1477144.htmlhtml

ASP.NET Core 里面一个比较重要的就是Startup.cs 类,包括加载配置, 经过依赖注入加载组件, 注册路由等都在此处进行。今天就来聊一聊Startup 类的做用和用法。app

 

与 ASP.NET 对比,ASP.NET Core 最显著的变化之一就是配置应用程序的方式,Global.asax、FilterConfig.cs 和 RouteConfig.cs 通通消失了,取而代之的是 Program.cs 和 Startup.cs。Program.cs 做为 Web 应用程序的默认入口,会自动调用Startup.cs 中的 ConfigureServices 方法 和 Configure 方法。大体流程以下图所示:
 

Startup 类

Startup 类是配置服务和应用的请求管道。ide

Startup 类的做用:函数

  1. ConfigureServices方法用于定义(注册)应用程序所使用的服务。(如:ASP.NET Core MVC,Entity Framework Core,Identity 等);ui

  2. Configure方法用于定义请求管道的中间件,该管道将用于处理应用程序的全部请求。spa

  3. 注册服务添加方法是无序的,ASP.NET Core在应用程序启动的时候,只要有相应服务便可,而注册中间件时方法是有序的,管道内的每个组件均可以选择是否将请求交给下一个组件,并在管道中调用下一个组件以前或以后执行某些操做。3d

 

在应用启动时,ASP.NET Core 运行时会调用 ConfigureServices 和 Configure:code

public class Startup {   // 运行时调用此方法。使用此方法向容器添加服务。
  public void ConfigureServices(IServiceCollection services)   {     //使用此方法向容器添加服务。
  }   // 运行时调用此方法。使用此方法配置HTTP请求管道。
  public void Configure(IApplicationBuilder app, IHostingEnvironment env)   {     //使用此方法配置HTTP请求管道中间件。
  } } 

 

Startup 类的构造函数提供注册config,log,env 等服务:htm

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 方法中指定

 

 最后

1. 以上就将Startup 类简单的介绍完了,还有不少高级功能和用法,能够继续研究研究。
2. 参考文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.2


原文出处:https://www.cnblogs.com/zhangweizhong/p/11232336.html

相关文章
相关标签/搜索