通常の ASP.MVC プロジェクトでは、Unity とhttp://unitymvc3.codeplex.com/の Unity.Mvc3 パッケージで依存関係リゾルバーを構成します。
このテスト サービスは、HierarchicalLifetimeManagerに登録されています。
container.RegisterType<ITestService, TestService>(new HierarchicalLifetimeManager());
そして、Global.asax.cs でコンテナーを Mvc に接続します。
System.Web.Mvc.DependencyResolver.SetResolver(new Unity.Mvc3.UnityDependencyResolver(container));
そして、このテスト コントローラーを実行します。
public class TestController : Controller
{
private readonly ITestService _service;
public TestController(ITestService service)
{
this._service = service;
}
public ActionResult Test()
{
var locatedService = System.Web.Mvc.DependencyResolver.Current.GetService<ITestService>();
if (_service == locatedService)
return View("Success - Same Service");//This is always the result in an MVC controller
else
throw new Exception("Failure - Different Service Located");//This is never the result in an MVC controller
}
}
ただし、このプロジェクトでは、多数の WebAPI コントローラーを追加しています。
global.asax.cs にこの構成があります (今のところhttp://unitywebapi.codeplex.com/を使用しています。ただし、提案は受け付けています)。
System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
fromではなく from からの継承にApiTestController
似た を作成しました。ただし、ApiTestController はテストに失敗します。クラスとプロパティが Mvc 固有であることは理解しています。しかし、WebAPI には同等のものがありますか?TestController
ApiController
Controller
System.Web.Mvc.DependencyResolver
System.Web.Mvc.DependencyResolver.Current
System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver.GetService
System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver
インスタンスは構成した親コンテナーであるため、機能しません。ITestService をコンストラクターに挿入するために使用されたのは、子コントローラーではありません。
このユーザーも同様の問題を抱えているようです 。
ありがとう