基础控制器类的属性注入

时间:2011-10-16 18:09:13

标签: c# asp.net-mvc inversion-of-control autofac

我正在尝试在从BaseController类派生的任何控制器上自动设置属性。这是我的Application_Start方法中的代码。 尝试访问它时,UnitOfWork属性始终为null。

var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<VesteraTechnologiesContext>().As<IContext>();
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>();
builder.RegisterType<BaseController>()
       .OnActivated(c => c.Instance.UnitOfWork = c.Context.Resolve<IUnitOfWork>());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

这是BaseController的样子

public class BaseController : Controller
{
    public IUnitOfWork UnitOfWork { get; set; }
}

我试图通过属性而不是通过构造函数来实现这一点的原因是我不必在每个需要访问UnitOfWork属性的控制器中复制构造函数,因为构造函数是没有继承。

2 个答案:

答案 0 :(得分:14)

默认情况下,Autofac会将控制器注册为使用构造函数注入。要启用property injection with autofac:您应该使用:

builder.RegisterControllers(typeof(MvcApplication).Assembly)
       .PropertiesAutowired();

答案 1 :(得分:-1)

  

因为构造函数不是继承的。

通常,可以按如下方式调用基础构造函数:

public DescendantClass ()
  : base() 
{
}