C# 基本控制器类的属性注入
我正试图在从我的C# 基本控制器类的属性注入,c#,asp.net-mvc,inversion-of-control,autofac,C#,Asp.net Mvc,Inversion Of Control,Autofac,我正试图在从我的BaseController类派生的任何控制器上自动设置属性。这是我的应用程序\u Start方法中的代码。当我尝试访问UnitOfWork属性时,该属性始终为空 var builder = new ContainerBuilder(); builder.RegisterControllers(typeof(MvcApplication).Assembly); builder.RegisterType<VesteraTechnologiesContext>().As&
BaseController
类派生的任何控制器上自动设置属性。这是我的应用程序\u 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));
我尝试通过属性而不是构造函数来执行此操作的原因是,我不必在每个需要访问UnitOfWork
属性的控制器中复制构造函数,因为构造函数不是继承的
因为构造函数不是继承的
通常,可以按如下方式调用基本构造函数:
public DescendantClass ()
: base()
{
}
默认情况下,Autofac注册控制器以使用构造函数注入。要启用:您应使用:
builder.RegisterControllers(typeof(MvcApplication).Assembly)
.PropertiesAutowired();
OP需要一个带有
IUnitOfWork
参数的构造函数。GertArnold是正确的,我知道我可以级联构造函数,但这正是我试图避免的。谢谢。像这样的公共构造函数没有任何作用,除非还想为具有非默认构造函数的对象提供“默认构造函数”。基本构造函数将被隐式的“默认构造函数”自动调用。@nemesv感谢您的提示。您知道这是否会对性能产生影响吗?@tugberk我没有在生产环境中使用属性Autowired,所以我不知道它对性能有多大影响。它使用反射来查找公共的可设置属性,因此它至少具有通常的反射成本。@nemesv new linkplease@Trikaldarshi谢谢注意,我已经更新了链接。@nemesv:我有一个basecontroller,其中有一个要注入的属性,这对我没有帮助。
builder.RegisterControllers(typeof(MvcApplication).Assembly)
.PropertiesAutowired();