使用Ninject的ASP.NET WebAPI ActionFilters的依赖注入不起作用

Mik*_*ole 11 c# ninject asp.net-web-api

我正在尝试使用Ninject在ASP.NET WebAPI中设置ActionFilters上的DI.我按照这里的说明操作:https://github.com/ninject/Ninject.Web.WebApi/wiki/Dependency-injection-for-filters

我这样创建我的ActionFilter:

public class ApiAuthorizeFilter : AbstractActionFilter
{
    private readonly IValidateApiTokenService _validateApiTokenService;

    public ApiAuthorizeFilter(IValidateApiTokenService validateApiTokenService)
    {
        _validateApiTokenService = validateApiTokenService;
    }

    public override bool AllowMultiple => true;

    public override void OnActionExecuting(HttpActionContext actionContext)
    {
    }

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

我这样配置:

kernel.BindHttpFilter<ApiAuthorizeFilter>(FilterScope.Controller);
Run Code Online (Sandbox Code Playgroud)

基于上述链接的信息,我的理解是ActionFilter然后应该运行所有WebAPI控制器中的所有Actions.但是,我在过滤器中的两个重写方法中都设置了断点,它永远不会被击中.我在配置中设置了一个断点,可以确认它正在执行.

我错过了什么?我需要这个ActionFilter来运行我项目中每个ApiController中的所有Actions.

小智 3

在你的创业课程中

public void Configuration(IAppBuilder app)
{    
    var kernel = new StandardKernel();
    // register IValidateApiTokenService
    var config = new HttpConfiguration();
    config.Filters.Add(new ApiAuthorizeFilter(kernel.Get<IValidateApiTokenService>());
}
Run Code Online (Sandbox Code Playgroud)