1. 程式人生 > 實用技巧 >ASP.Net Core Startup類

ASP.Net Core Startup類

我們瞭解了Program類如何負責建立和配置Web主機。但是,在構建和執行主機之前,Program類將呼叫startup類以進行進一步配置。它從類中呼叫Configure&ConfigureServices方法。

什麼是Startup類

ASP.NET Core 啟動(startup.cs)類是一個簡單的類,不繼承任何介面。這是我們配置請求管道和中介軟體的地方。我們還可以配置服務並將其新增到依賴項注入容器中。該類必須包含方法Configure,並且可以選擇性的包含ConfigureServices方法。

它類似於經典ASP.NET中的global.asax。

為什麼要使用Startup類?

Program類與Startup類是ASP.NET Core應用程式中最重要的兩個類。應用程式的所有配置都在這兩個檔案中進行。

配置應用程式基礎結構的Program類。

Program配置應用程式基礎設施。program類在啟動時建立web主機。然後,它配置日誌記錄DI容器。配置系統,Kestrel Web伺服器,IIS整合等。它還將框架服務新增到DI容器中,以便我們可以使用它。

Startup類的作用

Startup類是我們配置應用程式元件的地方。Startup類具有兩個主要功能。

  1. 配置服務以進行依賴注入。
  2. 它配置請求管道,管道處理對應用程式發出的所有請求。

Startup類的示例

啟動類通常命名為startup.cs。它位於專案根目錄中。Main方法是應用程式的入口點。它配置WebHost,對其進行構建並執行。然後,主機接收HTTP請求,並將其傳遞到請求管道。

WebHost在構建WebHost之前呼叫UseStartup方法。

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
       .UseStartup<Startup>();   

UseStartup方法指示WebHost在何處查詢Startup類。啟動類通過約定的方式命名。我們可以使用任何名稱建立一個啟動類。例如,如果我們希望將AppStartup用作Startup類,請記住將其包含在程式中

.UseStartup<AppStartup
>()

啟動中可用的服務

服務

目的

IApplicationBuilder

我們將此服務用於應用程式請求管道。

IHostingEnvironment

此服務提供當前的EnvironmentNameContentRootPathWebRootPathWeb根檔案提供程式

ILoggerFactory

提供建立記錄器的機制

IServiceCollection

這是一個DI容器。我們將服務新增到此容器中。

方法

可用服務

Startup Constructor

IHostingEnvironmentILoggerFactory

ConfigureServices

IServiceCollection

Configure

IApplicationBuilderIHostingEnvironmentILoggerFactory

配置服務

ConfigureServices是我們配置服務的方法。將服務新增到DI容器中。此方法是可選的。但是,如果存在,那麼它是WebHost呼叫的第一個方法。ConfigureServices方法將服務例項(型別為IServiceCollection)作為引數。 服務的例項通過依賴注入注入到ConfigureService中。

public void ConfigureServices(IServiceCollection services) {

IServiceCollection是DI容器。我們將服務新增到此容器中。

services.AddMvc();

將服務新增到DI容器將使它們可用於依賴注入。這意味著我們可以在應用程式中的任何位置注入這些服務。依賴注入是ASP.NET Core的新功能之一。ASP.NET Core廣泛使用依賴項注入。下面的示例顯示了一種典型ConfigureServices方法。

public void ConfigureServices(IServiceCollection services) {
  services.Configure<CookiePolicyOptions>(options =>
  {
     options.CheckConsentNeeded = context => true;
     options.MinimumSameSitePolicy = SameSiteMode.None;
  });
  services.AddMvc();
}

Configure

Configure方法是必須的。在ConfigureServices方法之後呼叫它。configure方法允許我們配置ASP.NET Core請求管道。該請求管道指定應用程式應該如何響應HTTP請求。組成請求管道的元件稱為中介軟體。configure方法典型的配置如下所示。如果我們選擇MVC Web應用程式(MVC)模板,那麼Visual Studio生成如下的方法。

// 執行時將呼叫此方法。 使用此方法來配置HTTP請求管道。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
      {
        app.UseDeveloperExceptionPage();
      }
      app.UseStaticFiles();
      app.UseCors("AllowAll");
      app.UseAuthentication();
      app.UseMvc(routes =>
        routes.MapRoute(
                   name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
            });
}

Configure方法需要 提供IApplicationBuilder和HostingEnvironment的例項。上面的程式碼沒有注入ILoggerFactory,但是我們可以這樣做。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

然後,我們將中介軟體元件新增到IApplicationBuilder例項的例項中。第一行檢查我們是否處於開發環境中。 如果是,它將使用擴充套件方法UseDeveloperExceptionPage註冊DeveloperExceptionPage中介軟體。

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

在隨後的幾行中,我們將註冊另外三個中介軟體。

app.UseStaticFiles();
app.UseCors("AllowAll");
app.UseAuthentication();

最後一行程式碼註冊了MVC中介軟體。 在註冊中介軟體時配置了路由。

app.UseMvc(routes =>
  routes.MapRoute(
     name: "default",
     template: "{controller=Home}/{action=Index}/{id?}");
});

configure方法

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  if (env.IsDevelopment())
  {
    app.UseDeveloperExceptionPage();
  }
  app.Run(async (context) =>
  {
    await context.Response.WriteAsync("Hello World!");
  });
}

我們使用應用程式的run方法來註冊嵌入式中介軟體。啟動類(startup.cs)類是我們配置應用程式元件的位置。可選ConfigureServices方法是我們註冊DI服務的地方。Configure方法是我們建立請求管道的地方。然後,在構建和執行Web主機之前,CreateDefaultBuilder方法將讀取啟動內容以配置Web主機。