ASP.NET Core 中文文檔 第三章 原理(1)應用程序啟動


原文:Application Startup
作者:Steve Smith
翻譯:劉怡(AlexLEWIS)
校對:謝煬(kiler398)許登洋(Seay)

ASP.NET Core 為你的應用程序提供了處理每個請求的完整控制。Startup 類是應用程序的入口(entry point),這個類可以設置配置(configuration)並且將應用程序將要使用的服務連接起來。開發人員可以在 Startup 類中配置請求管道,該管道將用於處理應用程序的所有請求。

章節:

Startup 類

在 ASP.NET Core 中,Startup 類提供了應用程序的入口,而且在所有應用程序中都有 Startup 類。可能會存在特定環境的啟動類和方法(參見 Working with Multiple Environments),但無論如何, Startup 類都將被充當為應用程序的啟動點。ASP.NET 會在主程序集中搜索名為 Startup 的類(在任何命名空間下)。你可以指定一個其它程序集用於檢索,只需使用 Hosting:Application 配置鍵。ASP.NET 並不關心 Startup 類是不是定義為 public,如果它符合命名規范,ASP.NET 將繼續加載它。如果有多個 Startup 類,也不會觸發異常,ASP.NET 將基於命名空間選擇其中一個(匹配項目的根命名空間優先,否則使用第一個按字母排列的命名空間中的類)。

Configure 方法

Configure 方法用於指定 ASP.NET 應用程序將如何響應每一個 HTTP 請求。簡單來說,你可以配置每個請求都接收相同的響應。然而,大多數現實世界應用程序需要比這多得多的功能。更復雜的管道配置可以封裝於 中間件(middleware) 之中,並通過擴展方法添加到 IApplicationBuilder 上。

Configure 方法必須接受一個 IApplicationBuilder 參數。一些額外服務,比如 IHostingEnvironment 或 ILoggerFactory 也可以被指定,如果在它們可用情況下,這些服務將會被服務器 注入 進來。在下例(源於默認的 Web 站點模板)中可見多個擴展方法被用於配置管道以支持 BrowserLink 、錯誤頁、靜態文件、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();//手工高亮

    // Add external authentication middleware below. To configure them please see http://go.microsoft.com/fwlink/?LinkID=532715

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

每個 Use 擴展方法都會把一個 中間件 加入請求管道。比如 UseMvc 擴展方法會把 路由中間件 加進請求管道,並把 MVC 配置為默認的處理器。

在 Middleware 一章中,你可以了解到更多有關中間件的信息,並使用IApplicationBuilder 定義請求管道。

ConfigureServices 方法

你的 Startup 類能可選地包含一個 ConfigureServices 方法用來配置用於應用程序內的服務。ConfigureServices 方法是 Startup 類中的公開方法,通過參數獲取一個IServiceCollection 實例並可選地返回 IServiceProviderConfigureServices 需要在 Configure 之前被調用。這一點非常重要,這是因為像 ASP.NET MVC 中的某些功能,需要從 ConfigureServices 中請求某些服務,而這些服務需要在接入請求管道之前先被加入 ConfigureServices 中。

正如通過 Configure,推薦在 IServiceCollection 上使用擴展方法來包裝含有大量配置細節的 ConfigureServices 。你可在本例(使用了默認的 Web 站點模板)中看到幾個 Add[Something] 擴展方法被用於設置應用程序,以便能夠使用 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>();
}

通過 依賴注入(dependency injection) 可將服務加入服務容器,使其在應用程序中可用。正如 Startup 類能將指定的依賴項作為其方法參數——而不是硬編碼(hard-coding)來實例化特定實現——對於中間件、MVC 控制器以及應用程序中的其它類來說都可以做到這一點。

ConfigureServices 方法同樣是可以增加配置選項類的地方(如上例中的 AppSettings),只要你想讓它在應用程序中生效。更多有關配置選項的信息請閱讀Configuration

在啟動時服務可用

ASP.NET Core 在應用程序啟動期間提供了一些應用服務和對象。你可以非常簡單地使用這些服務,只需要在在 Startup 類的構造函數或是它的 Configure 與 ConfigureServices 方法中的一個包含合適的接口即可。下面定義了在 Startup 類中對每個方法可用的服務。框架服務和對象包括:

IApplicationBuilder
被用於構建應用程序的請求管道。只可以在 Startup 中的 Configure 方法里使用。更多請閱讀 請求Features

IApplicationEnvironment
提供了訪問應用程序屬性,類似於ApplicationNameApplicationVersion 以及 ApplicationBasePath。可以在 Startup 的構造函數和 Configure 方法中使用。

IHostingEnvironment
提供了當前的 EnvironmentNameWebRootPath 以及 Web 根文件提供者。可以在 Startup 的構造函數和 Configure 方法中使用。

ILoggerFactory
提供了創建日志的機制。可以在 Startup 的構造函數或 Configure 方法中使用。更多請閱讀 Logging

IServiceCollection
當前容器中各服務的配置集合。只可在 ConfigureServices 方法中被使用,通過在該方法中配置可使服務在應用程序中可用。

看看 Startup 類中按它們被調用排序的每一個方法,下面的服務可被作為參數:
Startup Constructor - IApplicationEnvironment - IHostingEnvironment - ILoggerFactory

ConfigureServices - IServiceCollection

Configure - IApplicationBuilder - IApplicationEnvironment - IHostingEnvironment - ILoggerFactory

注意
盡管 ILoggerFactory 在構造函數中可用,但它通常在 Configure 方法中配置。具體可閱讀 Logging

擴展閱讀

返回目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM