エントリポイント「Main」メソッド(Programクラス)
それでは、プロジェクトテンプレートにて生成されたASP.NET Coreのコードについて見ていきましょう。本稿では、従来のASP.NET MVCのコードと異なる箇所を中心に紹介していきたいと思います。
ASP.NET Coreの起動時には、コンソールアプリのように「public static void Main」が最初に呼び出されます(そのため対象DLL内に「staticなMainメソッド」が1つだけあることが条件となります。メソッド名はproject.jsonのentryPoint属性で変更できます)。
public class Program
{
// staticのMainメソッドが開始場所
public static void Main(string[] args)
{
// WebHostBuilderでホスト設定し、WebHostを構築
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
// WebHostの起動
host.Run();
}
}
Webサーバーの設定を行う「WebHostBuilder」
ASP.NET CoreのWebサーバーを起動するには、WebHostBuilderクラスにてWebサーバーの設定を行います。そのため、ここのMainメソッドでは、WebHostBuilderクラスに対してUse~メソッドをつなげていき、Webサーバーの設定を行っています。
ここでは、以下の内容を指定しています。
- Kestrelサーバーの使用
- カレントディレクトリの指定
- IIS統合
- 起動用Sartupクラス
挙動としては、WebHostBuilderクラスのBuildメソッドを呼び出すと、設定に基づいた「WebHost」クラスが生成されます。そしてRunメソッドを呼び出すことでWebサーバーが起動されます。
Webサーバーであるホスト「Host」
ASP.NET Coreアプリケーションでは、Webサーバーである「ホスト(Host)」を必要とします。プログラム中にてホストを起動することで、Webアプリケーションとして動作します。
ホストはIWebHostインターフェイスを実装するクラスで、WebサーバーとしてHTTPリクエストを受信し、そのライフサイクルを制御します。WebHostBuilderの場合、WebHostクラス(Microsoft.AspNetCore.Hosting.Internal名前空間)を返します。
[コラム] GitHubで開発されているASP.NETプロジェクト
ASP.NET Coreの開発はオープンソースで行われています。そのため、GitHub ASP.NETページで、多くのプロジェクトのソースを見ることができます。以下に注目度の高いリポジトリの一例を紹介します。
| リポジトリ名 | 概要 |
|---|---|
| DependencyInjection | DI(IoC)機能 |
| Docs | 説明ドキュメント群 |
| EntityFramework | データアクセス技術Entity Frameworkの.NET Core版 |
| Hosting | Webサーバー(ホスト) |
| Identity | ユーザーとメンバシップ管理 |
| MVC | Webアプリケーションとサービスのためのフレームワーク |
| MusicStore | サンプルコード |
| Razor | cshtmlにて編集するMVCのビュー |
| Routing | ルーティング制御 |
| Templates | Visual Studioのテンプレート |
| Tooling | Visual Studioのツール |
興味を持たれた方はソースコードや開発状況をチェックしてみてはいかがでしょうか。
