在webapi2中使用带autofac的过滤器

时间:2016-03-19 15:47:51

标签: autofac

我有一个actionfilter,如下所示..过滤器基本上会在响应的标题中添加一些属性..

 public class myHeaderAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            if (actionExecutedContext.Response != null)
            //my code goes here
            base.OnActionExecuted(actionExecutedContext);
        }
    }

我通常会在WebApiConfig.Register中将其称为config.Filters.Add(new myHeaderAttribute());

我希望在我的项目中使用Autofac ..

autofac网站中有一个页面(http://docs.autofac.org/en/latest/integration/webapi.html)which谈到实施IAutofacActionFilter。

但是,我不清楚自己应该做些什么。

我可以创建另一个实现IAutofacActionFilter的类并添加onActionExecuted方法。 但是,我是否也保留现有课程或将其与WebApiConfig.Register中的行一起删除。

该页面还提到了注册Autofac过滤器提供程序以及实现IAutofacActionFilter的类。但是没有完整的例子。

此外,它还提到了使用服务地点'如果我们需要在过滤器中使用每个请求或依赖于每个实例的服务。

整件事对我来说似乎有点混乱。如果有人了解这些概念并在网络api2项目中使用Autofac,我真诚地感激。能引导我。

由于

1 个答案:

答案 0 :(得分:0)

删除它。它在您自己引用的文档中完全解释了它使用自己的动作过滤器解析器。请参阅“通过依赖注入提供过滤器”一节。

<强>更新

首先注册过滤器提供商:

var builder = new ContainerBuilder();
builder.RegisterWebApiFilterProvider(config);

然后像这样注册你的actionfilter:

builder.Register(c => new myHeaderAttribute())
.AsWebApiActionFilterFor<YourController>(c => c.YourMethod(default(int)))
.InstancePerApiRequest();

如此完整的代码:

var builder = new ContainerBuilder();
builder.RegisterWebApiFilterProvider(config);
builder.Register(c => new myHeaderAttribute())
.AsWebApiActionFilterFor<YourController>(c => c.YourMethod(default(int)))
.InstancePerApiRequest();

文档中没有任何内容。如果您有任何具体问题,那么您可以单独提问。但这变得太宽泛了。