前面讲了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
方法中指定。
最后
1. 以上就将Startup 类简单的介绍完了,还有很多高级功能和用法,可以继续研究研究。
2. 参考文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.2