21

我真的被困在将依赖注入到 web api 的动作过滤器中的方法上。我有一个像这样的动作过滤器:

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

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

    public override void OnActionExecuting(HttpActionContext actionContext)
    {        
    }
}

我想通过使用 Windsor 对属性存储库进行属性注入(但使用哪个 IoC 容器并不重要)

我确实想出了自定义 FilterProvider 但对我来说没有用,有人有解决方案或运行代码吗?将不胜感激

4

3 回答 3

4

对于 WebAPI 和 AutoFac,您可以使用:

builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);

文档在这里

于 2013-07-02T11:10:37.363 回答
4

您需要检查您的特定 IOC 实施。NInject 和 Autofac 等 IOC 容器通过注入公共属性具有某种类型的过滤器注入。温莎我不确定,但这里有一个链接可以创建一个可能对温莎有帮助的包装器:http: //eagle081183.wordpress.com/2010/09/21/dependency-injection-with-asp-net-mvc-action -filters/和另一篇直接解决温莎问题的文章:http ://weblogs.asp.net/psteele/archive/2009/11/04/using-windsor-to-inject-dependencies-into-asp-net-mvc -actionfilters.aspx

为了 NInject 和 Autofac 的完整性:

N注入:

自动法:

**编辑 - 附加选项**

GlobalConfiguration.Configuration.DependencyResolver.GetService(...)无论您使用哪种 IOC 容器,您都应该能够从任何过滤器中执行此操作。

于 2012-06-07T13:22:39.090 回答
1

您可以使用 Ninject.Web.WebApi 程序集(显然使用 Ninject 作为 IoC)来完成这项工作。我建议通过https://github.com/ninject/Ninject.Web.WebApi查看源代码和 SampleApplication 以了解它们是如何完成过滤器注入的。

于 2012-06-07T12:43:29.327 回答