我试图自动设置一个属性从任何控制器派生自我的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();