How to do dependency injection to Action Filter on ASP.NET Web API

扶醉桌前 提交于 2020-01-12 04:06:30

问题


I really get stuck on the approach to do dependency injection into action filter of web api. I have an action filter like this:

public class AuthorizationAttribute : ActionFilterAttribute
{
    public IApiKeyRepository Repository { get; set; }

    private Guid GetApiKey(string customerKey)
    {
        return Repository.GetApiKey(customerKey);
    }

    public override void OnActionExecuting(HttpActionContext actionContext)
    {        
    }
}

I would like to do property injection on the property Repository by using Windsor (but it does not matter which IoC container is used)

I did come up to customize FilterProvider but it did not work out for me, does anyone have solution or running code on this? it will be much appreciated


回答1:


You need to check your specific IOC implementation. IOC Containers such as NInject and Autofac have some type of filter injection by injecting public properties. Windsor I am unsure about, but here is a link that creates a wrapper which might help with Windsor: http://eagle081183.wordpress.com/2010/09/21/dependency-injection-with-asp-net-mvc-action-filters/ and another article directly addressing the issue with Windsor: http://weblogs.asp.net/psteele/archive/2009/11/04/using-windsor-to-inject-dependencies-into-asp-net-mvc-actionfilters.aspx.

For completeness with NInject and Autofac:

NInject:

  • http://codeclimber.net.nz/archive/2009/02/10/how-to-use-ninject-to-inject-dependencies-into-asp.net-mvc.aspx
  • Ninject in an Action Filter

Autofac:

  • ASP.NET MVC 3, Action Filters, and Autofac Dependency Injection

**EDIT - additional option **

You should be able to do GlobalConfiguration.Configuration.DependencyResolver.GetService(...) from any filter regardless of the IOC container you are using.




回答2:


For WebAPI and AutoFac you can use:

builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);

The documentation is here.




回答3:


You can use the Ninject.Web.WebApi assembly (obviously using Ninject as the IoC) to make this work. I would suggest looking at the source and SampleApplication via https://github.com/ninject/Ninject.Web.WebApi to see how they are accomplishing Filter injection.



来源:https://stackoverflow.com/questions/10930402/how-to-do-dependency-injection-to-action-filter-on-asp-net-web-api

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!