如何使用 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();
我正在 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();