FC2ブログ
Unity MvcとWebApi の違い
Unity Mvc は System.Web.Mvc.DependencyResolver にUnityコンテナを渡す。
Unity WebAPI は System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver にUnityコンテナを渡す。

そもそもMvc とWebAPI ではリクエストの処理するラインが違うため、依存関係を注入する場所が違っている。
※コントローラー、アクションの選択、生成がそもそも違う。

Mvc でリクエストごとにDispose を呼び出したい場合は
UnityMvcActivator.cs のソースにある下記の行をコメントアウトする。

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

また、RegisterType メソッドの引数に PerRequestLifetimeManager のインスタンスを渡す。

WebAPI でリクエストごとにDispose を呼び出したい場合は
UnityHierarchicalDependencyResolver を使って依存関係の解決を行うようにする。
デフォルトでは、UnityDependencyResolver なので変更すること。
また、RegisterType メソッドの引数に HierarchicalLifetimeManager を使う。WebAPIのUnity ライブラリにPerRequestLifetimeManager は存在しない。

Mvc とWebAPI が共存したプロジェクトだと、WebAPI でUnityDependencyResolver を使ってもDispose が呼ばれる。これはPerRequestLifetimeManager のおかげなんだろうけど、ちゃんと仕組みを理解していないため、なんとなく気持ちが悪い。

Mvc で、PerRequestLifetimeManager を使わないで HierarchicalLifetimeManager を使うようにすると、Mvc 側でDispose が呼ばれない。
何か違いがあるのだろう。仕組みを理解しないとだめだなこれは('A`)
スポンサーサイト
TOP
プロフィール

hssamurai

Author:hssamurai
FC2ブログへようこそ!

最新記事
最新コメント

最新トラックバック

月別アーカイブ
カテゴリ