Webアプリケーションの設定を行う「Startup」クラス
Webサーバーの設定に続けて、アプリケーションの設定を行う「Startup」クラスを見ていきましょう。スタートアップに使用するクラスは、ホスト設定時に「WebHostBuilder().UseStartup<クラス名>
- コンストラクタ(環境情報を設定)
- ConfigureServicesメソッド(使用するサービスを設定)
- Configureメソッド(リクエスト処理方法を設定)
(1)環境設定を行うコンストラクタ(Startupクラス)
コンストラクタでは環境に関する情報を設定します。コンストラクタ引数のIHostingEnvironmentに環境情報が渡されます。
public Startup(IHostingEnvironment env)
{
// ConfigurationBuilderで環境設定
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
上記のコードでは、ConfigurationBuilderクラスを用いて「パス」「設定ファイル」「環境変数」といった設定を行っています。例えば、アプリケーション設定を記述している「appsettings.json」ファイルを読み込んでいます。
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}
このファイルはログの設定で、後述するConfigureメソッドにて読み込まれます。以前であればWeb.configに記載する内容でしたが、ASP.NET Coreでは、独立した設定用Jsonファイルに記述しています。
なお、中編で紹介した環境変数(「Development」「Staging」「Production」)に応じた対象ファイルが、「AddJsonFile($"appsettings.{env.EnvironmentName}.json"」という記載により読み込まれる挙動となります。
(2)サービス登録を行うConfigureServicesメソッド(Startupクラス)
2番目に、ConfigureServicesメソッドが呼び出されます。ここでは、IServiceCollection引数に使用するサービスを登録して、アプリケーションで使う準備を行います。
public void ConfigureServices(IServiceCollection services)
{
アプリケーションで使用するサービスの登録(DI)
services.AddMvc();
}
上記のコードでは「AddMvc」メソッドにて、Mvc用のサービスを登録しています。
このConfigureServicesメソッドではアプリケーションで使用するサービス群を登録できます。標準で他にも、次のサービスを登録するメソッドが用意されています。
| サービスを追加するメソッド名 | 説明 |
|---|---|
| AddAuthorization | 認可に関するサービス |
| AddCors | CORS(Cross-Origin Requests)サービス |
| AddDbContext | Entity Frameworkのサービス |
| AddDistributedMemoryCache | 分散メモリキャッシュサービス |
| AddIdentity | メンバーシップ(ユーザーログイン)サービス |
| AddLogging | ログ出力サービス |
| AddMemoryCache | インメモリキャッシュのサービス |
| AddMvc | ASP.NET MVCのサービス |
| AddSession | セッションを使用するサービス |
[コラム]Entity Framework Coreとは
Entity Framework Coreは、軽量なデータアクセスフレームワークです。セットアップはNuGetで導入することができ、SQL Server、SQLite、Npgsql、IBM Data Servers、インメモリ(検証/テスト用途)等DBの対応しています。日本語での説明としては、Microsoftの赤間さんの記事が参考になります。
DIコンテナ機能が標準で提供されたASP.NET Core
独自に開発したクラス(サービス)をアプリケーションに登録することもできます。その場合は「services.AddTransient
ASP.NET CoreではDIコンテナ(オブジェクト生成と依存性解決を行うフレームワーク)の機能が標準で提供されています。そのためControllerのコンストラクタ引数に、インターフェイスを宣言するだけで、その実装クラスを利用できます。Add〜メソッドの種類は、インスタンスのライフサイクルに応じて、Transient(呼び出し時に毎回生成)、Scoped(HTTPリクエストごとに一度生成)、Singleton(アプリケーションで一度生成)のいずれかから選択できます。
なお、autofacのようなサードパーティのDIコンテナを使うこともできます。詳細はDependency Injectionのページをご覧ください。
