我试图自动设置属于我的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
属性的控制器中,因为构造函数不会被继承。
谢谢你nemesv,这工作完美。 –
@nemesv感谢您的提示。你知道吗,如果这有什么影响? – tugberk
@tugberk我没有在生产环境中使用PropertiesAutowired,所以我不知道它有多少perf影响。它使用反射来查找公共可设置属性,因此它至少具有通常的反射成本。 – nemesv