c# - 基 Controller 类的属性注入(inject)

标签 c# asp.net-mvc inversion-of-control autofac

我正在尝试在派生 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/

相关文章:

asp.net - 在 MVC 中控制 SQL 注入(inject)

java - 我可以使用带有构造函数和本地实例的 Guice 抽象模块来提供动态绑定(bind)吗?

c# - MEF:使用 CreationPolicy.NonShared 时将不同的构造函数参数传递给一个部分

c# - 在 asp.net MVC 中为下拉列表创建列表

c# - 无法找到名称为 Pomelo.EntityFrameworkCore.MySql 的提供程序集

c# - 如何在 C# 中创建动态对象

c# - 在 asp :HyperLink NavigateUrl 中调用 C# 函数

c# - 在 ASP.NET 5 (vNext) MVC 6 中实现自定义路由器

c# - 无法从程序集“mscorlib”加载类型 'System.Reflection.IntrospectionExtensions'

c# - LINQ:将数组 [,] 转换为数组 []