细说.net core Startup
程序员文章站
2024-01-04 11:11:52
...
Startup类配置服务和应用程序的请求管道。
Startup 类
- 可以选择的包括ConfigureServices方法来配置应用程序的服务。
- 必须包括一个 Configure 方法来创建应用程序的请求处理管道。
ConfigureServices和Configure在用用程序启动时由运行时调用:
public class Startup
{
//向服务容器中添加服务
public void ConfigureServices(IServiceCollection services)
{
...
}
// 使用Configure 方法 配置HTTP 请求管道
public void Configure(IApplicationBuilder app)
{
...
}
}
可以在项目中为不同的环境分别定义独立的启动类Startup(如, StartupDevelopment),系统启动时会选择适当的启动类。ASP.NET 并不关心 Startup 类是不是定义为 public,如果它符合命名规范,ASP.NET 将继续加载它。如果有多个 Startup 类,也不会触发异常,ASP.NET 将基于命名空间选择其中一个(匹配项目的根命名空间的启动类优先,否则使用第一个按字母排列的命名空间中的启动类)。
ConfigureServices 方法
- 可选的。
- 在 Configure 方法之前调用,用来配置应用程序的服务。
- 它的配置选项是按约定设置的。
向服务容器添加服务,使他们在项目和配置方法中可用。这些服务是通过依赖注入或从IApplicationBuilder.ApplicationServices解决实现。
最大的特性是,需要大量的设置,可用过IServiceCollection的扩展方法上添加[服务]。一个典型的web应用程序需要注册服务实体框架,Identity,和MVC:
public void ConfigureServices(IServiceCollection services)
{
//注册MVC
services.AddMvc();
//注册数据库上下文
services.AddDbContext<NetCoreForWebContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("NetCoreForWebContext")));
//注册Identity
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
}
Services available in Startup
web host通过启动类的构造函数提供了一些有效可用服务。应用程序还可以通过ConfigureServices增加额外的服务。主机配置的服务和ConfigureServices增加的额外的服务在整个应用程序中都是有效可用的。
Configure 方法
Configure 方法用于指定应用程序如何响应HTTP请求。请求的管道通过向IApplicationBuilder实例中添加中间件组件j进行配置。IApplicationBuilder在Configure方法中是可用的,但它没有在服务容器中注册。托管将会创建一个IApplicationBuilder并直接将其传递给Configure方法。
ASP.NET Core 模板配置了一个支持开发的异常页面管道,适用于BrowserLink,错误页面,静态文件,ASP。NET MVC:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//设置错误页面中间件
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
//添加静态文件服务中间件
app.UseStaticFiles();
//添加mvc路由设置中间件
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
每个 Use
扩展方法都会把一个 中间件 加入请求管道。比如 UseMvc
扩展方法会把 路由中间件 加进请求管道,并把 MVC 配置为默认的处理器。