Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基本控制器类的属性注入_C#_Asp.net Mvc_Inversion Of Control_Autofac - Fatal编程技术网

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();