ASP.NET Core系列(三):啓動類Startup

前面講了ASP.NET Core 的項目結構,查看完整的ASP.NET Core系列文章:https://www.cnblogs.com/zhangweizhong/category/1477144.htmlhtml

ASP.NET Core 裏面一個比較重要的就是Startup.cs 類,包括加載配置, 經過依賴注入加載組件, 註冊路由等都在此處進行。今天就來聊一聊Startup 類的做用和用法。app

 

與 ASP.NET 對比,ASP.NET Core 最顯著的變化之一就是配置應用程序的方式,Global.asax、FilterConfig.cs 和 RouteConfig.cs 通通消失了,取而代之的是 Program.cs 和 Startup.cs。Program.cs 做爲 Web 應用程序的默認入口,會自動調用Startup.cs 中的 ConfigureServices 方法 和 Configure 方法。大體流程以下圖所示:
 

Startup 類

Startup 類是配置服務和應用的請求管道。ide

Startup 類的做用:函數

  1. ConfigureServices方法用於定義(註冊)應用程序所使用的服務。(如:ASP.NET Core MVC,Entity Framework Core,Identity 等);ui

  2. Configure方法用於定義請求管道的中間件,該管道將用於處理應用程序的全部請求。spa

  3. 註冊服務添加方法是無序的,ASP.NET Core在應用程序啓動的時候,只要有相應服務便可,而註冊中間件時方法是有序的,管道內的每個組件均可以選擇是否將請求交給下一個組件,並在管道中調用下一個組件以前或以後執行某些操做。3d

 

在應用啓動時,ASP.NET Core 運行時會調用 ConfigureServices 和 Configure:code

public class Startup
{
  // 運行時調用此方法。使用此方法向容器添加服務。
  public void ConfigureServices(IServiceCollection services)
  {
    //使用此方法向容器添加服務。
  }
  // 運行時調用此方法。使用此方法配置HTTP請求管道。
  public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  {
    //使用此方法配置HTTP請求管道中間件。
  }
} 

 

Startup 類的構造函數提供註冊config,log,env 等服務:orm

public class Startup
{
    private readonly IHostingEnvironment _env;
    private readonly IConfiguration _config;
    private readonly ILoggerFactory _loggerFactory;
   //構造函數,加載配置文件,註冊log等
    public Startup(IHostingEnvironment env, IConfiguration config, 
        ILoggerFactory loggerFactory)
    {
        _env = env;
        _config = config;
        _loggerFactory = loggerFactory;
    }
   ...

}

ConfigureServices 方法

方法是可選的; 可是若是使用的話,它會在WebHost的Configure方法以前被調用。 WebHost可能會在調用啓動方法以前配置一些服務。 按照慣例,在這個方法中設置配置選項。htm

對於須要大量設置的功能,在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>();
}

ConfigureServices 將服務添加到服務容器,使其在應用和 Configure 方法中可用

 

Configure 方法

Configure方法用於指定ASP.NET應用程序如何響應HTTP請求。 經過將中間件組件添加到由依賴注入提供的IApplicationBuilder實例來配置請求管道。

從下面的例子中,咱們使用了幾個擴展方法來配置支持:異常頁和異常處理程序, 靜態文件,  MVC, 和 Identity的管道。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseMvc();
}

每一個 Use 擴展方法將一個或多箇中間件組件添加到請求管道。 例如,UseMvc 擴展方法將路由中間件添加到請求管道,並將 MVC 配置爲默認處理程序。

其餘服務(如 IHostingEnvironment 和 ILoggerFactory),也能夠在 Configure 方法中指定

 

 最後

1. 以上就將Startup 類簡單的介紹完了,還有不少高級功能和用法,能夠繼續研究研究。
2. 參考文檔:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.2
相關文章
相關標籤/搜索