1. 程式人生 > >ASP.NET Core 應用程式Startup類介紹 (轉載)

ASP.NET Core 應用程式Startup類介紹 (轉載)

Startup類配置服務和應用程式的請求管道。

 

 

Startup 類



ASP.NET Core應用程式需要一個啟動類,按照慣例命名為Startup。在主程式的Web Host生成器(WebHostBuilderExtensions)的 UseStartup <TStartup> 擴充套件方法中指定啟動類名稱。

 

您可以為不同的環境定義不同的Startup類,並在執行時選擇適當的Startup類。如果在Web Host配置或選項中指定startupAssembly(啟動程式集),託管將載入該啟動程式集並搜尋 Startup 或 Startup[Environment] 型別。根據名稱字尾匹配當前環境的類將被優先使用,所以如果應用程式在開發環境中執行,幷包含一個Startup

和一個StartupDevelopment類,他將使用StartupDevelopment類。

通俗的講,ASP.NET Core應用程式啟動的時候將會根據當前的執行環境(生產環境(Production)或者開發環境(Development))自動選擇啟動類。比如在一個ASP.NET Core應用程式中,具有兩個啟動類StartupStartupDevelopment,那麼當我們的啟動環境設定為開發環境的時候,啟動時將會搜尋啟動程式集,優先使用StartupDevelopment這個帶有Development字尾的啟動類。

 

我們來驗證一下!
建立兩個啟動類Startup

StartupDevelopment,我們分別在這兩個類的構造方法中打上標記以便於我們區分使用了哪個啟動類。
Startup:

StartupDevelopment:

然後在Program類中設定啟動程式集名稱

我們通過修改launchSettings.json裡的環境配置來切換環境:

我們可以看到當我們使用開發環境的時候使用的確實是StartupDevelopment啟動類。

我們也可以通過呼叫UseStartup<TStartup>來定義一個固定的Startup類,該類將被使用而不考慮環境。 這是推薦的方法。

Startup類構造方法可以接受通過依賴注入提供的依賴性。 常用的方法是使用IHostingEnvironment

來設定配置源。

Startup必須包含Configure方法,並可以選擇包含ConfigureServices方法,這兩個方法在應用程式啟動時呼叫。 該類還可以包含這些方法的特定於環境的版本。 ConfigureServices(如果存在)在Configure之前呼叫。

Configure方法主要是配置ASP.NET Core的中介軟體,相當於我們在ASP.NET中所說的管道,ConfigureServices主要是配置依賴注入(DI)。

 

 

ConfigureServices 方法



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

將服務新增到服務容器使得它們可以通過依賴注入在應用程式中使用(https://www.cnblogs.com/OpenCoder/p/9673031.html)。

 

 

在啟動時可用的服務



ASP.NET Core依賴注入在應用程式啟動期間提供服務。 您可以通過在Startup類的構造方法或其Configure方法中包含適當的介面作為引數來請求這些服務。 ConfigureServices方法只接受一個IServiceCollection引數(但是可以從這個集合中檢索任何已註冊的依賴注入服務,所以不需要額外的引數,例如如果需要IHostingEnvironment物件時,可以在ConfigureServices方法中呼叫services.BuildServiceProvider().GetService<IHostingEnvironment>()即可)。

下面是一些通常由啟動方法請求的服務:

  • 在構造方法中:IHostingEnvironment,ILogger<Startup>
  • ConfigureServices方法中:IServiceCollection
  • Configure方法中:IApplicationBuilder, IHostingEnvironment, ILoggerFactory

Startup類構造方法或其Configure方法可以請求由WebHostBuilder ConfigureServices方法新增的任何服務。 使用WebHostBuilder在啟動方法中提供您需要的任何服務。

 

 

Configure 方法



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的更多資訊,請參閱中介軟體
額外的服務,如IHostingEnvironmentILoggerFactory也可以在方法簽名中指定,在這種情況下,如果這些服務可用,將被注入。
參考:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup

 

原文連結