此为系列文章,对MSDN ASP.NET Core 的官方文档进行系统学习与翻译。其中或许会添加本人对 ASP.NET Core 的浅显理解
Startup类配置了服务以及app的请求管道。
Startup类
ASP.NET Core使用了一个Startup类,按照惯例,其被命名为Startup。Startup类主要包含:
- 可选的包含了一个ConfigureServices类用以配置应用程序的服务。服务是给app提供功能的可复用组件。服务在ConfigureServices中被注册并且通过DI或者 ApplicationServices在整个app中被消费。
- 包含一个Configure用来创建app的请求处理管道。
当app启动时,ConfigureServices
和Configure会被ASP.NET Core运行时所调用:
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); } }
以上的示例代码来源于Razor页面程序,MVC版本的Startup是类似的。
当app建立宿主时候,便会指定Startup方法。通常我们是在宿主建造器中通过调用WebHostBuilderExtensions.UseStartup<TStartup> 来指定一个Startup的。如下所示:
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
宿主提供器服务对于Startup的构造函数来说是可用的。而app通过ConfigureServices
来添加额外的服务。然后,宿主提供器服务以及额外添加的服务在Configure
中以及整个app中都是可用的。
当使用Generic Host (IHostBuilder)时候,只有如下的服务类型可以被注入到Startup
构造函数中:
public class Startup { private readonly IWebHostEnvironment _env; public Startup(IConfiguration configuration, IWebHostEnvironment env) { Configuration = configuration; _env = env; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { if (_env.IsDevelopment()) { } else { } } }
大部分服务直到调用Configure
方法之后才可用使用。