前面讲了ASP.NET Core 的项目结构,查看完整的ASP.NET Core系列文章:https://www.cnblogs.com/zhangweizhong/category/1477144.html
ASP.NET Core 里面一个比较重要的就是Startup.cs 类,包括加载配置, 通过依赖注入加载组件, 注册路由等都在此处进行。今天就来聊一聊Startup 类的作用和用法。
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(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddIdentity () .AddEntityFrameworkStores () .AddDefaultTokenProviders(); services.AddMvc(); // Add application services. services.AddTransient (); services.AddTransient (); }
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