C# MVC中Api控制器的依赖注入

C# MVC中Api控制器的依赖注入,c#,asp.net-mvc-4,dependency-injection,castle-windsor,C#,Asp.net Mvc 4,Dependency Injection,Castle Windsor,我正在Asp.NETMVC4中使用CastleWindsor的依赖项注入。 我使用DefaultControllerFactory模式,它适用于我所有的Mvc控制器 今天,我添加了一个新的jQuery控件jqGrid,它使用ApiController ItemsApiController 获取数据。 该控件位于普通Mvc控制器ItemsController和jqGrid Url属性的视图中 设置为/api/ItemsApi 当我启动页面时,控件为空,并且不会调用ItemsApiControlle

我正在Asp.NETMVC4中使用CastleWindsor的依赖项注入。 我使用DefaultControllerFactory模式,它适用于我所有的Mvc控制器

今天,我添加了一个新的jQuery控件jqGrid,它使用ApiController ItemsApiController 获取数据。 该控件位于普通Mvc控制器ItemsController和jqGrid Url属性的视图中 设置为/api/ItemsApi

当我启动页面时,控件为空,并且不会调用ItemsApiController。 在没有依赖项注入的虚拟项目中,相同的代码按预期工作。我也是 很确定依赖注入是问题的原因

在我的DefaultControllerFactory中,我可以看到路由解析不正确:

controller=Items; 
action=api;
id=ItemsApi;
我希望:

controller=ItemsApi; 
action=GET;
我在WebApiConfig中注册了名为first的DefaultApi,并在RouteConfig中注册了默认路由

当我将Url属性更改为./../api/ItemsApi时,我在虚拟项目中没有执行的操作会调用ItemsApiController,但不会通过 依赖项注入,因此仅使用默认构造函数

更新: 当我另外实现IHttpControllerSelector接口时,ItemsApiController被发送到

public HttpControllerDescriptor SelectController(HttpRequestMessage request)
{
  var controllerName = routeData.Values["controller"];
  Resolve<??>
}
但我不知道如何把这个名字和温莎城堡结合起来


这是正确的方法吗?如果是,如何将IHttpControllerSelector与Castle结合起来?

我放弃了,将api控制器用作合成根

我认为以某种方式编写自己的框架是可能的,但它也会使事情变得复杂
复杂的依赖注入应该会让我的生活更轻松。

你有没有考虑过挥舞出你的默认构造函数,这样你的DI容器就不会和这两者混淆?@WillMarcouiller是的,我有