一. Startup 类
ASP.NET Core 应用是一个控制台应用, 它在其 Program.Main 方法中创建 web 服务器. 其中 Main 方法是应用的托管入口点, Main 方法调用 WebHost.CreateDefaultBuilder 来创建 Web 主机, 自动分配了 Kestrel Web 服务器. IWebHostBuilder 的 Build 方法生成 IWebHost 对象调用 Run 方法启动 WebHost, 此时托管应用并开始侦听 HTTP 请求. 代码如下所示:
- public class Program
- {
- public static void Main(string[] args)
- {
- CreateWebHostBuilder(args).Build().Run();
- }
- public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
- WebHost.CreateDefaultBuilder(args)
- .UseStartup<Startup>();
- }
1.1 应用启动 Startup 类
IWebHostBuilder 类的 UseStartup 调用启动类, 按照约定命名为 Startup, 该类必须是公共类, 用于定义请求处理管道和配置应用所需的任何服务. 当应用启动时会调用 ConfigureServices 和 Configure 两个方法. ConfigureServices 用于注入服务, Configure 用于响应 HTTP 请求.
- public class Startup
- {
- // Use this method to add services to the container.
- public void ConfigureServices(IServiceCollection services)
- {
- ...
- }
- // Use this method to configure the HTTP request pipeline.
- public void Configure(IApplicationBuilder App)
- {
- ...
- }
- }
1.2 ConfigureServices 方法
ConfigureServices 方法负责注入服务. 该方法在 WebHost 的 Configure 方法之前被调用, 将服务添加到服务容器使得它们可以通过依赖注入在应用程序中使用, 在 webHost 启动之前会加载该方法中的服务. 典型模式是调用 Add{service}方法注入服务, 然后调用所有 services.Configure{Service} 方法. 注入服务后, 使其在应用和 Configure 方法中使用服务. 在参数 IServiceCollection (服务容器)上有 Add[Service] 扩展方法, 用于添加自带的 framework 框架服务 (例如添加 EF,identity,mvc 服务) 也可以在 IServiceCollection 上注入自定义服务.
- public void ConfigureServices(IServiceCollection services)
- {
- // 注入 Razor Pages 和 MVC 需要的服务
- services.AddMvc();
- }
1.3 Configure 方法
Configure 方法用于指定应用响应 HTTP 请求的方式. 可将中间件注册到 IApplicationBuilder 实例来配置请求管道. 下面示例注册的中间件包括: ExceptionHandler 异常 / 错误处理, HttpsRedirection 重定向, StaticFiles 静态文件服务器, CookiePolicy 策略实施, mvc 等中间件. 每一个 use 开头的扩展方法将一个中间件添加到 IApplicationBuilder 请求管道中.
- 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();
- }
总结: (1) Program 的 main 方法用于创建 WebHost 服务, 调用启动类 Startup.
(2) Startup 中的 ConfigureServices 方法用于将服务注入到 IServiceCollection 服务容器中.
(3) Startup 中的 Configure 方法用于应用响应 HTTP 请求, 将中间件注册到 ApplicationBuilder 中来配置请求管道.
参考文献:
来源: https://www.cnblogs.com/MrHSR/p/10223694.html