【发布时间】: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