我正在尝试在从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
属性的控制器中复制构造函数,因为构造函数是没有继承。
答案 0 :(得分:14)
默认情况下,Autofac会将控制器注册为使用构造函数注入。要启用property injection with autofac:您应该使用:
builder.RegisterControllers(typeof(MvcApplication).Assembly)
.PropertiesAutowired();
答案 1 :(得分:-1)
因为构造函数不是继承的。
通常,可以按如下方式调用基础构造函数:
public DescendantClass ()
: base()
{
}