【问题标题】:Dependency Injection with Api Controller in MVC在 MVC 中使用 Api 控制器进行依赖注入
【发布时间】:2014-09-16 19:44:27
【问题描述】:

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

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

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

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

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

我希望:

controller=ItemsApi; 
action=GET;

我在 WebApiConfig 中注册了我的“DefaultApi”(首先调用),并在 RouteConfig 中注册了我的“默认”路由。

当我将 Url 属性更改为“./../api/ItemsApi”(我在我的虚拟项目中没有做的)时,调用 ItemsApiController,但不是通过 依赖注入,因此只能使用默认构造函数。

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

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

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

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

【问题讨论】:

  • 您是否考虑过放弃默认构造函数,以便您的 DI 容器不会与两者混淆?
  • @WillMarcouiller 是的,我做到了

标签: c# asp.net-mvc-4 dependency-injection castle-windsor


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多