Net Core基礎知識:Startup 類
Startup 類
Startup類用於配置服務和應用的請求管道。
1.使用ConfigureServices方法選擇性的配置應用的服務,如Mvc。服務是一個提供應用功能的可重用元件。在ConfigureServices方法中註冊服務,並通過依賴注入或ApplicationServices在整個應用中使用服務。
2.使用Configure方法來建立應用的請求處理管道,註冊中介軟體。
在構建應用主機時指定Startup類。通常,通過在Program.cs中呼叫 UseStartup<TStartup>方法來指定Startup類。在應用啟動時,ASP.NET Core 執行時會呼叫ConfigureServices和Configure,必須定義Configure,ConfigureServices 可以選擇的定義。
public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>(); }
ConfigureServices 方法
ConfigureServices是可以配置的、配置選項按約定設定,在Configure方法之前執行,並由主機呼叫以配置應用程式的服務。在呼叫Startup之前主機webhost會自己配置某些服務,例如Logging、依賴關係注入 (DI) 服務等。
對於需要大量設定的功能,IServiceCollection上有Add{Service}
擴充套件方法。例如,AddDbContext、AddDefaultIdentity、AddEntityFrameworkStores 和AddRazorPages
將服務新增到服務容器,使其在應用和Configure
方法中可用。服務通過依賴關係注入或ApplicationServices進行解析。
public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
Configure 方法
Configure用於構建請求管道的中介軟體,來處理http請求,例如處理異常、靜態檔案等。
每個Use
擴充套件方法將一個或多箇中間件元件新增到請求管道,例如UseStaticFiles配置中介軟體提供靜態檔案。請求管道中的每個中介軟體元件負責呼叫管道中的下一個元件,或在適當情況下使鏈發生短路。可以在Configure
方法簽名中指定其他服務,如IWebHostEnvironment
、ILoggerFactory
或ConfigureServices
中定義的任何內容。如果這些服務可用,則會被注入。
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
不使用Startup配置Configure和ConfigureServices
不使用Startup的話需要在Host上呼叫ConfigureServices和Configure方法,多次呼叫ConfigureSerivces將會追加到下一個方法,但是多次呼叫Configure只會使用最後一個呼叫的Configure方法。
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureServices(services => { services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }) .Configure(app => { app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); });