我正在尝试在派生 self 的 BaseController
类的任何 Controller 上自动设置一个属性。这是我的 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
属性的 Controller 中复制构造函数,因为构造函数不是继承的。
最佳答案
Autofac 默认注册 Controller 以使用构造函数注入(inject)。启用 property injection with autofac : 你应该使用:
builder.RegisterControllers(typeof(MvcApplication).Assembly)
.PropertiesAutowired();
关于c# - 基 Controller 类的属性注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7786253/