我很努力獲得一個自定義屬性/過濾器在ASP.NET Web API上使用ninject構造函數注入。ASP.NET Web API Ninject構造函數注入自定義過濾器和屬性
下面的幾個片段給一些背景...
//controller
[ApiAuthorise]
public IEnumerable<Thing> Get()
// Attribute definition with no body
public class ApiAuthoriseAttribute : FilterAttribute {}
// Custom Filter definition
public class ApiAuthoriseFilter : IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{ throw new NotImplementedException(); }
}
//Ninject module for my API authorisation
public class ApiAuthoriseModule : NinjectModule
{
public override void Load()
{
this.BindFilter<ApiAuthoriseFilter>(FilterScope.Action, 0)
.WhenActionMethodHas<ApiAuthoriseAttribute>()
}}
//The registerServices(IKernel kernel) method in NinjectMVC3.cs
kernel.Load(new ApiAuthoriseModule());
這是字面上所有我有一個關於這個過濾器和屬性的代碼。 從我的理解,我不必顯式添加到全局過濾器集合的過濾器,因爲ninject照顧,是否正確?
如果我在我的屬性中放置一個構造函數並從那裏拋出異常,我可以看到該屬性正在觸發。
我懷疑的東西,我的東西Ninject側內做錯了,但花一個下午的時間閱讀別人的例子,似乎是等同於我的權利我知道尋求幫助:)
TIA
後
經過一番更多的遊戲後,主要的罪魁禍首似乎是BindFilter <>()方法和System.Web.Http.Filters.FilterScope和System.Web.Mvc.FilterScope之間的區別。 BindFilter()方法需要Mvc.FilterScope,但所有其他Web API代碼都引用Http.Filters.FilterScope。 不知道是否有一種方法來確認這... – 2012-02-29 14:38:29
只是在http://wildermuth.com/2012/2/26/WebAPI_and_Ninject鏈接,因爲它值得谷歌果汁,不遠離這個東西一百萬英里 – 2012-02-29 14:56:37