Startup
類配置服務和應用程序的請求管道。html
ASP.NET Core應用程序須要一個啓動類,按照慣例命名爲Startup
。在主程序的Web Host生成器(WebHostBuilderExtensions)的 UseStartup <TStartup>
擴展方法中指定啓動類名稱。json
您能夠爲不一樣的環境定義不一樣的Startup
類,並在運行時選擇適當的Startup
類。若是在Web Host配置或選項中指定startupAssembly
(啓動程序集),託管將加載該啓動程序集並搜索 Startup 或 Startup[Environment] 類型。根據名稱後綴匹配當前環境的類將被優先使用,因此若是應用程序在開發環境中運行,幷包含一個Startup
和一個StartupDevelopment
類,他將使用StartupDevelopment
類。app
通俗的講,ASP.NET Core應用程序啓動的時候將會根據當前的運行環境(生產環境(Production)或者開發環境(Development))自動選擇啓動類。好比在一個ASP.NET Core應用程序中,具備兩個啓動類
Startup
和StartupDevelopment
,那麼當咱們的啓動環境設置爲開發環境的時候,啓動時將會搜索啓動程序集,優先使用StartupDevelopment
這個帶有Development後綴的啓動類。ide
咱們來驗證一下!ui
創建兩個啓動類Startup
和StartupDevelopment
,咱們分別在這兩個類的構造方法中打上標記以便於咱們區分使用了哪一個啓動類。code
Startup:htm
StartupDevelopment:中間件
而後在Program
類中設置啓動程序集名稱blog
咱們經過修改launchSettings.json
裏的環境配置來切換環境:接口
咱們能夠看到當咱們使用開發環境的時候使用的確實是StartupDevelopment
啓動類。
咱們也能夠經過調用UseStartup<TStartup>
來定義一個固定的Startup類,該類將被使用而不考慮環境。 這是推薦的方法。
Startup
類構造方法能夠接受經過依賴注入提供的依賴性。 經常使用的方法是使用IHostingEnvironment
來設置配置源。
Startup類必須包含Configure
方法,並能夠選擇包含ConfigureServices
方法,這兩個方法在應用程序啓動時調用。 該類還能夠包含這些方法的特定於環境的版本。 ConfigureServices
(若是存在)在Configure
以前調用。
Configure
方法主要是配置ASP.NET Core的中間件,至關於咱們在ASP.NET中所說的管道,ConfigureServices
主要是配置依賴注入(DI)。
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>(); }
將服務添加到服務容器使得它們能夠經過依賴注入在應用程序中使用(http://www.cnblogs.com/stulzq/p/7761128.html)。
ASP.NET Core依賴注入在應用程序啓動期間提供服務。 您能夠經過在Startup
類的構造方法或其Configure
方法中包含適當的接口做爲參數來請求這些服務。 ConfigureServices
方法只接受一個IServiceCollection
參數(可是能夠從這個集合中檢索任何已註冊的服務,因此不須要額外的參數)。
下面是一些一般由啓動方法請求的服務:
在構造方法中:IHostingEnvironment
,ILogger<Startup>
在ConfigureServices
方法中:IServiceCollection
在Configure
方法中:IApplicationBuilder
, IHostingEnvironment
, ILoggerFactory
Startup
類構造方法或其Configure
方法能夠請求由WebHostBuilder ConfigureServices
方法添加的任何服務。 使用WebHostBuilder
在啓動方法中提供您須要的任何服務。
Configure
方法用於指定ASP.NET應用程序如何響應HTTP請求。 經過將中間件組件添加到由依賴注入提供的IApplicationBuilder
實例來配置請求管道。
從下面的例子中,咱們使用了幾個擴展方法來配置支持BrowserLink,error pages, static files, ASP.NET MVC, 和 Identity的管道。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); app.UseBrowserLink(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseIdentity(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
每一個Use
擴展方法將一箇中間件組件添加到請求管道。 例如,UseMvc
擴展方法將路由中間件添加到請求管道,並將MVC配置爲默認處理程序。
有關如何使用IApplicationBuilder的更多信息,請參閱中間件。
額外的服務,如IHostingEnvironment
和ILoggerFactory
也能夠在方法簽名中指定,在這種狀況下,若是這些服務可用,將被注入。
參考:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup