用于多个控制器的Autofac寄存器过滤器?

时间:2014-11-12 12:04:27

标签: c# asp.net-web-api autofac

我有2个基本控制器:

public class FirstBaseController : ApiController {}
public class SecondBaseController : ODataController {}

我还有一个用于调试目的的全局过滤器,我需要执行属性注入以传入log4net。

我尝试通过执行以下操作为两个控制器注册过滤器:

builder.RegisterType<DebugAttribute>()
  .AsWebApiFilterFor<FirstBaseController>()
  .AsWebApiFilterFor<SecondBaseController>()
  .InstancePerRequest()
  .PropertiesAutowired();

上面的代码编译但导致运行时错误。目前我只能为一个控制器注册一个过滤器:

builder.RegisterType<DebugAttribute>()
  .AsWebApiFilterFor<FirstBaseController>()
  .InstancePerRequest()
  .PropertiesAutowired();

有没有办法为多个控制器注册一个过滤器,例如添加谓词,如:

  .Where(t => t.Name.StartsWith("Base"))

2 个答案:

答案 0 :(得分:0)

您可以为每个需要的控制器注册过滤器。

builder.RegisterType<DebugAttribute>()
.AsWebApiFilterFor<FirstBaseController>()
.InstancePerRequest();

builder.RegisterType<DebugAttribute>()
.AsWebApiFilterFor<SecondBaseController>()
.InstancePerRequest();

但我认为有更好的方法。

答案 1 :(得分:0)

我有同样的问题,我在AutoFac Github页面上发现此问题被定义为错误。我们无法同时为多个控制器注册过滤器。 此错误仍然存​​在(2017年2月)

@Rroman给出了解决方案: 实际上,您必须使用多个声明语句为每个控制器注册过滤器。

Autofac github page - Bug declaration