我试图自动设置一个属性从任何控制器派生自我的BaseController类.这是我的Application_Start方法中的代码.当我尝试访问它时,UnitOfWork属性始终为空.
- 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属性的每个控制器中复制构造函数.
解决方法
默认情况下,Autofac将控制器注册为使用构造函数注入.启用
property injection with autofac:您应该使用:
- builder.RegisterControllers(typeof(MvcApplication).Assembly)
- .PropertiesAutowired();