前面講了ASP.NET Core 的專案結構,檢視完整的ASP.NET Core系列文章:https://www.cnblogs.com/zhangweizhong/category/1477144.html
ASP.NET Core 裡面一個比較重要的就是Startup.cs 類,包括載入配置, 通過依賴注入載入元件, 註冊路由等都在此處進行。今天就來聊一聊Startup 類的作用和用法。
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