天天看點

通過3個Hello World應用來了解ASP.NET 5應用是如何運作的(2)

Project2     Startup.cs     project.json Project3     Program.cs

我們在Project2目錄下添加一個文本檔案并将其命名為Startup.cs,并按照如下的方式定義一個同名的類型。

1

2

3

4

5

6

7

8

9

10

11

12

<code>using</code> <code>System;</code>

<code>namespace</code> <code>Project2</code>

<code>{</code>

<code>    </code><code>public</code> <code>class</code> <code>Startup</code>

<code>    </code><code>{</code>

<code>        </code><code>public</code> <code>void</code> <code>Configure()</code>

<code>        </code><code>{</code>

<code>            </code><code>Console.WriteLine(</code><code>"Hello World!"</code><code>);</code>

<code>        </code><code>}</code>

<code>    </code><code>}</code>

<code>}</code>

如上面的代碼片斷所示,我們在Startup類中定義了一個Configure方法,我們希望在應用的入口程式在正常啟動并完成初始化之後自動回調這個方法。對于應用自身來說,Startup是被啟動之後最先執行的類型,我們可以将一些針對應用的配置定義在Configure方法中。不過作為示範,我們僅僅讓此方法在控制台上列印“Hello World”字樣。

我們說過任何一個被KRuntime視為項目的目錄必須包含一個project.json檔案,是以我們需要在Project2目錄下建立這個一個文本檔案,我們指定的入口程式就定義在這個檔案之中。如下所示的是這個project.json檔案的内容,我們僅僅在其commands配置項中添加了一個名為“RunFromProject3”的指令,對應的值為“Project3

Startup

Configure”,其中Project3代表包含入口程式的程式集(項目Project3被編譯後生成的程式集)名稱,Startup和Configure組成的字元串數組将作為程式入口方法(Main)的參數,它們分别表示應用啟動程式所在的類型和對應的方法。我們同時在dependencies這個配置項中添加了針對Project3的項目依賴,這相當于在目前項目中添加了一個對應的項目引用。

<code>   </code><code>commands:{</code>

<code>      </code><code>"RunFromProject3"</code><code>:</code><code>"Project3 Startup Configure"</code>

<code>   </code><code>},</code>

<code>   </code><code>dependencies:{</code>

<code>       </code><code>"Project3"</code><code>:</code><code>""</code>

<code>  </code><code>}</code>

接下來我們在Project3目錄下添加一個文本檔案并将其命名為Program.cs,然後安裝如下的形式定義這個作為程式入口的Program類型。與上面示範的第一個Hello

World應用一樣,作為程式入口的類型必須命名為Program,其中包含一個靜态或者執行個體Main方法。如上面的代碼片斷所示,Main方法的目的在于解析定義在Project2的Startup類型,然後據此類型執行個體化一個對應的對象并調用其Configure方法。類型和方法的名稱來源于Main方法的參數,而類型解析采用的程式集名稱與目前目錄(%CD%)名稱一緻。

13

14

15

16

17

18

19

20

21

22

23

<code>using System;</code>

<code>using System.IO;</code>

<code>using System.Reflection;</code>

<code>using System.Linq;</code>

<code>namespace Project3</code>

<code>    </code><code>public</code><code>class</code> <code>Program</code>

<code>        </code><code>public void Main(string[] args)</code>

<code>            </code><code>string startup           = args[0];</code>

<code>            </code><code>string configure         = args[1];</code>

<code>            </code><code>string appBase           = Directory.GetCurrentDirectory();</code>

<code>            </code><code>string appName           = appBase.Substring(appBase.LastIndexOf(</code><code>'\\'</code><code>) + 1);</code>

<code>            </code><code>Type startupType = Assembly.Load(</code><code>new</code> <code>AssemblyName(appName))</code>

<code>                   </code><code>.GetTypes().FirstOrDefault(type =&gt; type.Name == startup);</code>

<code>            </code><code>startupType.GetMethod(configure)</code>

<code>                </code><code>.Invoke(Activator.CreateInstance(startupType),</code><code>new</code> <code>object[] { });</code>

通過3個Hello World應用來了解ASP.NET 5應用是如何運作的(2)

在完成對作為入口程式的Program類的定義之後,我們同樣需要在Project3目錄下建立一個必需的project.json檔案。和第一個示範的Hello World應用一樣,這裡不需要任何的配置,是以直接将内容設定為“{}”即可。

在Project2的project.json檔案中,我們在其commands配置項中定義了一個指令,其實這個指令是為K.cmd定義,我們可以直接利用後者執行這個指令。與執行第一個Hello

World程式一樣,我們開啟CMD指令行工具。在通過CD指令将Project2設定為目前目錄之後,我們按照如下的方式執行K RunFromProject3(RunFromProject3是在project.json中定義的命l令名稱)。從控制台的輸出可以确定我們的應用被正常啟動了。

設定自定義的入口程式展現應用本身與應用托管之間的分離,它使我們可以建立獨立于托管環境的應用,并根據需要寄宿于任何一個我們希望的宿主程式下,對于Web應用來說這一點尤為重要。對于之前的Web應用來說,IIS是它們唯一的宿主,但是ASP.NET

<a href="http://www.cnblogs.com/artech/p/asp-net-5-hello-world-01.html">通過3個Hello World應用來了解ASP.NET 5應用是如何運作的(1)</a>

<a href="http://www.cnblogs.com/artech/p/asp-net-5-hello-world-02.html">通過3個Hello World應用來了解ASP.NET 5應用是如何運作的(2)</a>

<a href="http://www.cnblogs.com/artech/p/asp-net-5-hello-world-03.html">通過3個Hello World應用來了解ASP.NET 5應用是如何運作的(3)</a>

作者:蔣金楠

微信公衆賬号:大内老A

如果你想及時得到個人撰寫文章以及著作的消息推送,或者想看看個人推薦的技術資料,可以掃描左邊二維碼(或者長按識别二維碼)關注個人公衆号(原來公衆帳号蔣金楠的自媒體将會停用)。

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

<a href="http://www.cnblogs.com/artech/p/asp-net-5-hello-world-02.html" target="_blank">原文連結</a>

繼續閱讀