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のページをご覧ください。