asp.net core 系列 2 啟動Startup類介紹
一.Startup類
ASP.NET Core 應用是一個控制檯應用,它在其 Program.Main
方法中建立 Web 伺服器。其中Main方法是應用的託管入口點,Main 方法呼叫 WebHost.CreateDefaultBuilder來建立 Web 主機,自動分配了 Kestrel Web 伺服器。IWebHostBuilder 的 Build 方法生成 IWebHost物件呼叫Run 方法啟動WebHost,此時託管應用並開始偵聽 HTTP 請求。程式碼如下所示:
public class Program { publicstatic 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
和 Configur
e兩個方法。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://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/startup?view=aspnetcore-2.1