前面講了ASP.NET Core 的項目結構,查看完整的ASP.NET Core系列文章:https://www.cnblogs.com/zhangweizhong/category/1477144.htmlhtml
ASP.NET Core 裏面一個比較重要的就是Startup.cs 類,包括加載配置, 經過依賴注入加載組件, 註冊路由等都在此處進行。今天就來聊一聊Startup 類的做用和用法。app
Startup 類是配置服務和應用的請求管道。ide
Startup 類的做用:函數
1. ConfigureServices方法用於定義(註冊)應用程序所使用的服務。(如:ASP.NET Core MVC,Entity Framework Core,Identity 等);ui
2. Configure方法用於定義請求管道的中間件,該管道將用於處理應用程序的全部請求。spa
3. 註冊服務添加方法是無序的,ASP.NET Core在應用程序啓動的時候,只要有相應服務便可,而註冊中間件時方法是有序的,管道內的每個組件均可以選擇是否將請求交給下一個組件,並在管道中調用下一個組件以前或以後執行某些操做。3d
在應用啓動時,ASP.NET Core 運行時會調用 ConfigureServices 和 Configure:code
public class Startup { // 運行時調用此方法。使用此方法向容器添加服務。 public void ConfigureServices(IServiceCollection services) { //使用此方法向容器添加服務。 } // 運行時調用此方法。使用此方法配置HTTP請求管道。 public void Configure(IApplicationBuilder app, IHostingEnvironment env) { //使用此方法配置HTTP請求管道中間件。 } }
Startup
類的構造函數提供註冊config,log,env 等服務:orm
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; } ... }
方法是可選的; 可是若是使用的話,它會在WebHost的Configure
方法以前被調用。 WebHost可能會在調用啓動方法以前配置一些服務。 按照慣例,在這個方法中設置配置選項。htm
對於須要大量設置的功能,在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方法用於指定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