通常のコントローラ(IController)でうまく動作しますが、Windsor Containerをasp.net web apiで設定できません。Windsorコンテナを使用してAsp.net MVC 4 Web APIコントローラに依存関係を挿入できません
私は同じプロジェクト内に通常のコントローラとAPIコントローラを持っています。ここ
は細かい作業正規コントローラ用のコードである:
/// <summary>
/// Controller Factory class for instantiating controllers using the Windsor IoC container.
/// </summary>
public class WindsorControllerActivator : IControllerActivator
{
private readonly IWindsorContainer container;
public WindsorControllerActivator(IWindsorContainer container)
{
this.container = container;
}
public IController Create(RequestContext requestContext, Type controllerType)
{
var controller = (IController)container.GetService(controllerType);
return controller;
}
}
とglobal.asax.cs
container.Register(Component.For<IWindsorContainer>().Instance(container));
container.Register(Component.For<IControllerActivator>().ImplementedBy<WindsorControllerActivator>());
以下では、問題のコードである:
public class WindsorApiControllerActivator : IHttpControllerActivator
{
private readonly IWindsorContainer container;
public WindsorApiControllerActivator(IWindsorContainer container)
{
this.container = container;
}
public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
{
var controller = (IHttpController)container.GetService(controllerType);
return controller;
}
}
インストーラ:
container.Register(Component.For<IHttpControllerActivator>().ImplementedBy<WindsorApiControllerActivator>());
しかし、WindsorApiControllerActivatorを実行することはできません。
私は、WindsorControllerActivatorにデバッガを置くと期待通りに動作しますが、WindsorApiControllerActivatorでは決して実行されません。
あなたの助けが
コンテナを依存関係リゾルバーとしてどのように登録しますか? – nemesv
WindsorApiControllerActivatorをカスタマイズする理由は何ですか?特別な扱いはありませんか? –
Cuong le:apiコントローラでNhibernate Sessionオブジェクトを使用しているため、 [HttpPost] 公共のIList 検索(SearchViewModelモデル) { のIList searchResultViewModels = SearchVenues(モデル)。return searchResultViewModels; // "Hello World"を返します。 } –
公開ISession NSession {get;セット; } 公開VendorController(セッションセッション) { NSession =セッション; } // GET API/