MVC中Api控制器的依赖注入

本文关键字:依赖 注入 控制器 Api MVC | 更新日期: 2023-09-27 18:22:02

我在Asp.Net Mvc4中使用Castle Windsor的依赖注入。我使用DefaultControllerFactory模式,它适用于我的所有Mvc控制器。

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

当我启动页面时,控件为空,并且不会调用ItemsPiController。没有依赖项注入的伪项目中的相同代码可以按预期工作。所以我是非常确定依赖项注入是问题的原因。

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

controller=Items; 
action=api;
id=ItemsApi;

我希望:

controller=ItemsApi; 
action=GET;

我在WebApiConfig中注册了我的"DefaultApi"(首先调用),在RouteConfig中注册了"Default"路由。

当我将Url属性更改为"./../api/ItemsApi"(我在伪项目中没有这样做)时,会调用ItemsApiController,但不会通过依赖注入,因此仅使用默认构造函数。

更新:当我额外实现IHttpControllerSelector接口时,ItemsPiController将发送到

public HttpControllerDescriptor SelectController(HttpRequestMessage request)
{
  var controllerName = routeData.Values["controller"];
  Resolve<??>
}

但我不知道如何将这个名字与温莎城堡结合起来。

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

MVC中Api控制器的依赖注入

我放弃了,使用api控制器作为组成根。

我认为在某种程度上写自己的框架是可能的,但它也会让事情变得更容易复杂的依赖注入应该会让我的生活更轻松。