【发布时间】:2012-09-15 13:16:52
【问题描述】:
我无法使用 asp.net web api 配置 Windsor Container,尽管它与常规控制器 (IController) 一起工作正常。
我在同一个项目中有常规控制器和 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,它永远不会被执行。
您的帮助将不胜感激
【问题讨论】:
-
如何将容器注册为依赖解析器?
-
为什么你自定义 WindsorApiControllerActivator 而我没有看到任何特殊处理?
-
Cuong le: 因为我在 api 控制器中使用了 Nhibernate Session 对象
public ISession NSession { get;放; } 公共供应商控制器(ISession 会话){ NSession = 会话; } // GET api/[HttpPost] public IList Search(SearchViewModel model) { IList searchResultViewModels = SearchVenues(model);返回搜索结果视图模型; //返回“你好世界”; } -
@nemesv:你身边的任何更新
-
不要将 Windsor 容器注入到您的组件中:stackoverflow.com/questions/4985455/….
标签: asp.net-mvc asp.net-mvc-4 castle-windsor asp.net-web-api ioc-container