在ASP.NET web api項目中,哪裏推薦將屬性注入操作過濾器屬性的位置?在MVC 3的土地上,我們可以在從我們的IoC容器解析我們的控制器的時候爲ControllerActionInvoker
設置我們自己的實現,並覆蓋它的注入從容器解析的組件的方法GetFilters()
。將屬性注入Web API的`System.Web.Http.Filters.ActionFilterAttribute`
在ASP.NET Web API項目中有沒有類似的地方可以做到這一點?我有一個控制器工廠,從容器解析控制器,與CreateController
方法像這樣:
public IHttpController CreateController(HttpControllerContext controllerContext, string controllerName)
{
var controller = _kernel.Resolve<IHttpController>(controllerName);
controllerContext.Controller = controller;
controllerContext.ControllerDescriptor = new HttpControllerDescriptor(_configuration, controllerName, controller.GetType());
return controllerContext.Controller;
}
我看了一下HttpControllerDescriptor
,看看是否有什麼地方做的注射,但我不能看到一個合適的地方。任何指針在正確的方向?
'IHttpControllerSelector'在這裏沒有幫助 - 問題不在於正確解析控制器(這一切都正常),但它是關於將服務注入Action Filters。這是MVC中的一種方式 - http://www.jeremyskinner.co.uk/2008/11/08/dependency-injection-with-aspnet-mvc-action-filters/,但Web API略有不同。 – 2012-04-10 13:56:59
@RussCam是的,誤解了。更新。 – Aliostad 2012-04-10 14:15:54
我的結果和你一樣:)然而,我在容器中註冊的'IFilterProvider'卻似乎沒有被擊中; Action Filters正在運行,這表明框架沒有試圖從容器中解析出'IFilterProvider'。這有點令人沮喪,因爲http://aspnetwebstack.codeplex.com/上的源代碼與來自NuGet的程序集過時了! – 2012-04-10 14:41:07