CodeZine(コードジン)

特集ページ一覧

ASP.NET Coreの雛形コードを見てみよう

いよいよ登場「ASP.NET Core 1.0」 マルチプラットフォームな.NETとは? 第3回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2016/12/12 13:00

目次

Webアプリケーションの設定を行う「Startup」クラス

 Webサーバーの設定に続けて、アプリケーションの設定を行う「Startup」クラスを見ていきましょう。スタートアップに使用するクラスは、ホスト設定時に「WebHostBuilder().UseStartup<クラス名>」にて指定します。

 WebHostBuilderクラスのBuildメソッドを呼び出したタイミングで、Startupクラスのメソッドが次の順番で呼び出されます。

  1. コンストラクタ(環境情報を設定)
  2. ConfigureServicesメソッド(使用するサービスを設定)
  3. Configureメソッド(リクエスト処理方法を設定)

(1)環境設定を行うコンストラクタ(Startupクラス)

 コンストラクタでは環境に関する情報を設定します。コンストラクタ引数のIHostingEnvironmentに環境情報が渡されます。

リスト 「Startup.cs」 のコンストラクタ
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」ファイルを読み込んでいます。

リスト アプリケーション設定ファイル「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引数に使用するサービスを登録して、アプリケーションで使う準備を行います。

リスト StartupクラスのConfigureServicesメソッド
public void ConfigureServices(IServiceCollection services)
{
    アプリケーションで使用するサービスの登録(DI)
    services.AddMvc();
}

 上記のコードでは「AddMvc」メソッドにて、Mvc用のサービスを登録しています。

 このConfigureServicesメソッドではアプリケーションで使用するサービス群を登録できます。標準で他にも、次のサービスを登録するメソッドが用意されています。

ASP.NET Coreが提供するサービス例
サービスを追加するメソッド名 説明
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(<IEmailSender, MailSender>)」のように、インターフェイスと実装クラスのペアで登録します。

 ASP.NET CoreではDIコンテナ(オブジェクト生成と依存性解決を行うフレームワーク)の機能が標準で提供されています。そのためControllerのコンストラクタ引数に、インターフェイスを宣言するだけで、その実装クラスを利用できます。Add〜メソッドの種類は、インスタンスのライフサイクルに応じて、Transient(呼び出し時に毎回生成)、Scoped(HTTPリクエストごとに一度生成)、Singleton(アプリケーションで一度生成)のいずれかから選択できます。

 なお、autofacのようなサードパーティのDIコンテナを使うこともできます。詳細はDependency Injectionのページをご覧ください。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:いよいよ登場「ASP.NET Core 1.0」 マルチプラットフォームな.NETとは?

著者プロフィール

  • WINGSプロジェクト 青木 淳夫(アオキ アツオ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きた...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5