我发现了一些关于此的问题,但它们往往指向我正在关注的确切文档......但它仍然无法正常工作。
我正在构建一个相当简单的 ASP.NET MVC 4 站点,并且计划使用ActionFilterAttribute
基于 - 的日志记录。我有一个DataAccessProvider
类可以打开与数据库的事务并提供工作单元实例,我正在尝试将其注入到过滤器属性中。
文档说只需调用就足够了,RegisterFilterProvider()
并确保注册了相关类型。它特别说不需要注册该属性,但我已经尝试过使用和不使用。我的代码目前看起来像这样:
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.Register(x => new EntityAccessProvider())
.As<IDataAccessProvider>()
.InstancePerHttpRequest();
builder.RegisterType<DebugLogAttribute>().PropertiesAutowired();
// ^ I've tried it with and without this line
builder.RegisterFilterProvider();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
文档中的示例然后只是在过滤器上放置一个属性,所以我做了同样的事情:
public class DebugLogAttribute : ActionFilterAttribute
{
private IDataAccessProvider DataAccess { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext) { ... }
public override void OnActionExecuted(ActionExecutedContext filterContext) { ... }
}
文档说这一切都是必需的——甚至不需要注入的构造函数;它是通过属性注入完成的。但是,当我运行此代码时,该DataAccess
属性始终为null
; Autofac 似乎忽略了它。我知道注册工作正常,因为它正确地注入EntityAccessProvider
到我的控制器中,但它不适用于属性。我错过了什么?