13
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ASP.NET MVC5でDIはじめるガイド

Last updated at Posted at 2014-08-22

はじめに

ASP.NETでDIを使いはじめたいと思っている人向けのガイドです。
リクエスト毎に生成と破棄をしたいリソース(DbContext等)を自動的に管理することを目標としています。

DIコンテナはMSのUnity を使用します。

パッケージのインストール

ASP.NET MVC5プロジェクトに、Unityのパッケージをインストールします。

プロジェクトのApp_Start以下にUnityConfig.csUnityMvcActivator.csが生成されます。

管理対象の登録

リクエスト毎に生成と破棄を自動的にやってもらいたいものをUnityに登録します。

UnityConfig.csを開き、RegisterTypesメソッドの中に次のように記述します。

container.RegisterType<MyDbContext>(new PerRequestLifetimeManager(), new InjectionFactory(c => new MyDBContext()/*ここで生成処理*/));

最初の引数として new PerRequestLifetimeManger() を渡しているのがキモです。
これがリクエスト毎に生成と破棄を行ってくれます。
InjectionFactoryは生成時の処理を自由に記述するためのファクトリです。単にnewするだけでよいのであれば、

container.RegisterType<MyDbContext>(new PerRequestLifetimeManager()));

と書けばOKです。

HttpModuleの登録

UnityMvcActivator.csを開き、コメントアウトされている行を有効にします。

Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));

使う!

ControllerやViewの生成はもうUnityの管理下です!Controllerのコンストラクタの引数としてMyDbContextをとるようにすれば、そこにUnityで生成されたインスタンスが自動的に渡ってきます。リクエスト終了時にはDispose()がちゃんと呼ばれます!

13
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?