asp.net5 的應用啓動

參考來源:html

http://docs.asp.net/en/latest/conceptual-overview/aspnet.htmlnode

http://docs.asp.net/en/latest/fundamentals/startup.htmlweb

asp.net5應用是運行在dnx之上的,每個程序都是一個dnx項目,經過 Microsoft.AspNet.Hosting 這個包來加載的。編程

與Node.js作個類比:json

node.exe    index.js  至關於node這個程序打開代碼文件,加載運行。c#

                                  在進程裏增長一個Node.js: Server-side JavaScript的進程,佔空間7.6MB。windows

dnx web    至關於dnx程序搜索當前目錄,找到project.json,並找到裏面相應的命令,而後加載相應的代碼並運行。緩存

                  我機器是64位的win10.,在進程裏增長一個dnx(32位)的進程,在我機器上大概28MB的內存。  mvc

public class Startup{
     public void ConfigureServices(IServiceCollection services)
     {
     //定義用戶服務
     }

     public void Configure(IApplicationBuilder app)
     {
     //定義中間件
     }}

Services:

底層是經過DI 而建立的組件,用於通用部分。服務有三種:單件、局部做用域、即時服務。app

即時服務,每次使用都建立。局部做用域服務是每次請求時,建立一個做業域。單件服務是全局只有一個的服務。

Middleware

中間件是asp.net5處理時每一個請求管道。它處理HttpContext  上的異步邏輯,而且能夠按順序調用以後的中間件,也能夠隨時中斷請求。是在Configure方法裏,一般用UseXXX的一個IApplicationBuilder 擴展方法來調用。

asp.net5有一組預約義好的中間件,好比靜態文件訪問,路由,診斷,認證。 你還能夠自定義一個

Servers服務端。

經過Hosting並不直接監聽請求,而是一個HTTP Servergo 監聽,並將其轉爲一個HttpContext。

服務支持IIS或者self hosting 。在window上, WebListener server是基於HTTP.sys,而且脫離IIS的一個服務。

在非windows中,可使用跨平臺的 Kestrel web server

Web root

在project.json中,能夠定義根目錄。好比處理靜態文件時的根目錄。

Configuration

asp.net5支持一種簡單的 鍵值對的配置信息。 它是內置的功能,支持多種文件類型、環境變量。

在startup.cs中,定義一個靜態變量。初始化時,讓它加載各類配置。而後程序其它地方直接經過

Startup.Configure就能使用信息。


應用啓動

Startup類是程序的入口,這裏加載配置,服務。啓動時,會在程序集中在全部空間搜索叫Startup的類。你也能夠指定一個類名,經過Hosting:Application 的配置的鍵值,啓動類是否是public並沒有關係。  若是有多個同名的類,程序會搜索與項目根命名空間相同的優先,找不到,則根據命名空間的字母表順序來決定。

Startup類的構造函數也支持依賴注入,好比IApplicationEnvironment的參數。

Startup類一般它必須定義一個Configure函數,以及可選的ConfigureServices函數。

Configure函數是用來指定應用如何處理HTTP請求的。一般複雜的請求管道的配置是封閉在中間件裏,而後中間件再作成IApplicationBuilder的擴展方法來被Use. 函數必須有IApplicationBuilder 類型 的參數,後兩個是可選的參數IHostingEnvironment and ILoggerFactory 

這些參數的對象都是經過依賴注入產生的。依賴注入是Microsoft.Extensions.DependencyInjection包實現的功能。它向外提供IServiceCollection的一個實例,掛載着全部已經添加的ServiceDescriptors。

我的認爲asp.net5此處的Service命名有些問題 !IServiceCollection本是依賴注入的服務集合,它能夠隨時添加一個服務描述符(ServiceDescriptors),也隨時能夠反向生成一個實例對象來。asp.net5自身的服務Service前面描述過,表明一個功能模塊或功能組件,好比mvc,靜態文件服務等。

但我也不肯定這兩個Service到底指定的是否是同一個意思,或是故意爲之。

public void ConfigureServices(IServiceCollection services){
      Console.WriteLine(services.Count); //顯示13
      services.AddMvc();
     Console.WriteLine(services.Count);//顯示112,代表向依賴注入的服務集合裏緩存了99個服務描述
}

asp.net5的依賴注入的相關內容看了一些,但一直沒法深刻。由於每一個文檔都是在講:如何在Startup裏自動注入參數,如何在Startup裏添加一個服務,而後到Controller裏,構造注入。

關鍵的疑問點:Startup構造函數,Configure函數,Controller的構造函數注入時,爲何寫個參數就能注入了,這不很奇怪嗎?是經過重載實現的嗎?可能須要看一下源碼才能夠。

ConfigureServices 函數

這個函數在Startup類裏,是可選的。它能夠經過注入,傳入一IServiceCollection 實例做爲參數.

ConfigureServices函數比Configure更早的調用,services.AddMvc();能夠引入許多MVC必須的一些服務。

這樣在app.UseMvc()時,這些服務才能在請求來到 時被使用。

建議在使用時,把一些服務作成IServiceCollection 的擴展,好比下面這樣:

services.AddEntityFramework()
        .AddSqlServer();

這些添加進來的服務就進入到依賴注入的容器裏了,隨時能夠在你的應用中訪問到。經過依賴注入,能夠在函數裏注入參數,代替「硬編碼」,是很是好的編程實踐!

ConfigureServices函數仍是你添加配置---Configuration的地方

最後一段是講框架支持注入的服務,重點是Startup構造函數以及兩個Configre的函數裏的參數。它們分別有什麼用,有什麼屬性能夠獲取!

 The framework services and objects include:

  • IApplicationBuilder

  • Used to build the application request pipeline. Available only to the Configuremethod in Startup. Learn more about Request Features.

  • IApplicationEnvironment

  • Provides access to the application properties, such as ApplicationName,ApplicationVersion, and ApplicationBasePath. Available to the Startup constructor andConfigure method.

  • IHostingEnvironment

  • Provides the current EnvironmentNameWebRootPath, and web root file provider. Available to the Startup constructor and Configure method. Learn more about 🔧 Hosting.

  • ILoggerFactory

  • Provides a mechanism for creating loggers. Available to the Startup constructor andConfigure method. Learn more about Logging.

  • IServiceCollection

  • The current set of services configured in the container. Available only to theConfigureServices method, and used by that method to configure the services available to an application.

下面是三個函數調用裏,服務所對應的參數依次是

Startup Constructor - IApplicationEnvironment - IHostingEnvironment - ILoggerFactory

ConfigureServices - IServiceCollection

Configure - IApplicationBuilder - IApplicationEnvironment - IHostingEnvironment -ILoggerFactory

相關文章
相關標籤/搜索