如何使用 Autofac 将依赖项注入 MVC 5 全局过滤器

How to inject dependency into MVC 5 global filter using Autofac

我正在 MVC5 中注册一个依赖于 Migration class:

的全局过滤器
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
   filters.Add(new OfflineActionFilter(new Migration("connectionstring"));
}

我正在使用 Autofac 将依赖项注入我的控制器,我也更愿意在这里使用依赖项注入。 而且我宁愿不使用服务定位器(反)模式。这个怎么做? 属性 注入在 OfflineActionFilter 也许?但是怎么办?

我在 enable property injection for action filters 下的文档中找到了解决方案:

首先删除 RegisterGlobalFilters 方法中对 filters.Add 的调用,改为使用 Autofac 的 MVC 集成来注册过滤器:

builder.RegisterFilterProvider();
builder.Register(c => new OfflineActionFilter()) //parameterless constructor
       .AsActionFilterFor<Controller>()
       .PropertiesAutowired() //using property injection here
       .InstancePerRequest();

有趣的是,虽然文档中该部分的标题可能会让您认为我们只能使用 属性 注入,但我发现它也适用于构造函数注入(所以我改用了这个解决方案):

builder.RegisterFilterProvider();    
builder.Register(c => 
         new OfflineActionFilter(c.Resolve<Migration>()))//constructor with parameter
       .AsActionFilterFor<Controller>()
       .InstancePerRequest();