我正在尝试在派生 self 的 BaseController
类的任何 Controller 上自动设置一个属性。这是我的 Application_Start
方法中的代码。 UnitOfWork
属性在我尝试访问它时始终为 null。
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType().As();
builder.RegisterType().As();
builder.RegisterType()
.OnActivated(c => c.Instance.UnitOfWork = c.Context.Resolve());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
这是 BaseController 的样子
public class BaseController : Controller
{
public IUnitOfWork UnitOfWork { get; set; }
}
我尝试通过属性而不是通过构造函数来执行此操作的原因是,我不必在每个需要访问 UnitOfWork
属性的 Controller 中复制构造函数,因为构造函数不是继承的。
Autofac 默认注册 Controller 以使用构造函数注入(inject)。启用 property injection with autofac : 你应该使用:
builder.RegisterControllers(typeof(MvcApplication).Assembly)
.PropertiesAutowired();
Tôi là một lập trình viên xuất sắc, rất giỏi!