SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Scott Guthrie氏 Blog翻訳

ASP.NET 5の紹介

連載:ScottGu's Blog翻訳

  • X ポスト
  • このエントリーをはてなブックマークに追加

クラウド対応構成

 ASP.NET 5では、設定値に対してweb.configファイルを使用しなくてもよくしています。簡単に、クラウドにアプリを展開し、アプリが自動的に環境に合った設定値を読み取るようにしたいと思っていました。新システムでは、さまざまなソース(JSON、XML、環境変数など)から名前付きの値を要求できるようになっています。ソリューションに最適のフォーマットを選択できます。

 Startup.csファイルでは、設定値に対するソースの追加または削除ができます。

 上記のコードは、JSONファイルや環境変数から設定値を取得するように設定されたプロジェクトを示しています。他のソースを指定する必要がある場合はこのコードは変更できます。指定したconfig.jsonファイルで値を提供できます。

 Azureのようなホスト環境では、環境変数を設定して、アプリケーションが展開された後にローカル設定値の代わりにこれらの値が自動的に使用されます。テスト値が発行されるという心配をすることなく、アプリケーションを展開できます。

依存性注入(DI)

 依存性注入(DI)は、MVC、Web API、SignalRなどの既存のASP.NETフレームワークでサポートされていますが、一貫性のある総合的な方法ではありません。ASP.NET 5は、Webスタックすべてに渡り一貫性のある方法で使用できるビルトインDI抽象化を提供します。サービスには、ミドルウェア、フィルター、コントローラ、モデルバインディングなど、実質的にサービスを使用するパイプラインのどの部分でも、起動時にアクセスできます。ASP.NET 5には、システムをブートストラップする最小限のDIコンテナが含まれていますが、選択したコンテナ(Autofac、Ninjectなど)を簡単にデフォルトのコンテナと置き換えられます。サービスはSingletonでスコープは要求または一過性になります。

 例えば、ASP.NET MVC 6でコンストラクタインジェクションの使用方法を確認するために、新しいASP.NET 5スターターWebプロジェクトを作成し、シンプルなタイムサービスを追加してみます。

using System;
namespace WebApplication1
{
  public class TimeService
  {
    public TimeService()
    {
      Ticks = DateTime.Now.Ticks.ToString();
    }
    public String Ticks { get; set; }
  }
}

 コンストラクタが呼び出されたときに、単純なサービスクラスは現在のTicksを設定します。

 次に、StartupクラスのConfigureServicesメソッドで一過性のサービスとしてTimeServiceを登録します。

public void ConfigureServices(IServiceCollection services)
{
  services.AddMvc();
  services.AddTransient<TimeService>();
}

 その後、TimeServiceオブジェクトが作成されたときに、コンストラクタインジェクションを使用してTicksを書くようにHomeControllerを更新します。

public class HomeController : Controller
{
  public TimeService TimeService { get; set; }

  public HomeController(TimeService timeService)
  {
    TimeService = timeService;
  }

  public IActionResult About()
  {
    ViewBag.Message = TimeService.Ticks + " From Controller";
    System.Threading.Thread.Sleep(1);
    return View();
  }

  // Code removed for brevity
}

 見ていただくと、コントローラはTimeServiceを作成していません。コントローラがインスタンス化されるときに注入されています。

 MVC 6では、プロパティ経由でサービスを注入するのに[Activate]属性が使用できます。[Activate]は、コントローラ上だけでなく、フィルタ、ビューコンポーネント上でも使用できます。つまり、コントローラコードを以下のように簡素化できるということです。

public class HomeController : Controller
{
  [Activate]
  public TimeService TimeService { get; set; }

  // Code removed for brevity
}

 MVC 6は@Injectキーワードを通じてRazorビューでのDIもサポートしています。以下のコードでは、直接AboutビューにTimeServiceを注入し、アクセス可能なTimeSvcプロパティを定義しています。

@using WebApplication23
@inject TimeService TimeSvc

<h3>@ViewBag.Message</h3>

<h3>
  @TimeSvc.Ticks From Razor
</h3>

 アプリを実行すると、コントローラとビューで異なるTickの値が確認できます。

次のページ
高速HTTPパフォーマンス

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Scott Guthrie氏 Blog翻訳連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト Chica(チカ)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Scott Guthrie(Scott Guthrie)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8537 2015/03/13 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング