C# 多控制器的Autofac寄存器过滤器?

C# 多控制器的Autofac寄存器过滤器?,c#,asp.net-web-api,autofac,C#,Asp.net Web Api,Autofac,我有两个基本控制器: public class FirstBaseController : ApiController {} public class SecondBaseController : ODataController {} 我还有一个用于调试的全局过滤器,我需要进行属性注入以传入log4net 我尝试通过以下操作为两个控制器注册筛选器: builder.RegisterType<DebugAttribute>() .AsWebApiFilterFor<Firs

我有两个基本控制器:

public class FirstBaseController : ApiController {}
public class SecondBaseController : ODataController {}
我还有一个用于调试的全局过滤器,我需要进行属性注入以传入log4net

我尝试通过以下操作为两个控制器注册筛选器:

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

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

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

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

但我认为还有更好的方法。

我也有同样的问题,我在AutoFac Github页面上发现这个问题被定义为一个bug。我们不能同时为多个控制器注册一个筛选器。 此错误仍然存在(2017年2月)

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


您能详细说明问题所在吗?你有没有试过同样的方法却失败了?
FirstBaseController
是否从
SecondBaseController
派生而来,反之亦然?您是否正在尝试使用派生控制器并在基本控制器上注册筛选器?像这样的普通场景应该可以。我有两个独立的基本控制器,我想为这两个控制器注册过滤器。请将此添加到您的问题中。请至少包括班级签名。请显示用于尝试为第二个控制器注册筛选器的代码。请包括一个解释,当你尝试它时,你看到什么工作(或不工作)。嗨,你发现了什么吗?
  .Where(t => t.Name.StartsWith("Base"))
builder.RegisterType<DebugAttribute>()
.AsWebApiFilterFor<FirstBaseController>()
.InstancePerRequest();

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