我正在尝试使用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) { } }
我配置如下:
kernel.BindHttpFilter<ApiAuthorizeFilter>(FilterScope.Controller);
基于上述链接的信息,我的理解是,ActionFilter应该对所有WebAPI控制器中的所有操作运行.但是,我已经在过滤器中的两个被覆盖的方法中设置了断点,并且它从未被触发.我在配置中设置了一个断点,可以确认它正在执行.
我失踪了什么我需要这个ActionFilter在我的项目中的每个ApiController中的所有操作上运行.
解决方法
在你的启动类
public void Configuration(IAppBuilder app) { var kernel = new StandardKernel(); // register IValidateApiTokenService var config = new HttpConfiguration(); config.Filters.Add(new ApiAuthorizeFilter(kernel.Get<IValidateApiTokenService>()); }