我很努力获得一个自定义属性/过滤器在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