エントリポイント「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のツール |
興味を持たれた方はソースコードや開発状況をチェックしてみてはいかがでしょうか。