1. 程式人生 > 實用技巧 >Net Core基礎知識:Startup 類

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方法簽名中指定其他服務,如IWebHostEnvironmentILoggerFactoryConfigureServices中定義的任何內容。如果這些服務可用,則會被注入。

        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();
                });