我有一个基本控制器,从中继承我的所有控制器。这个基本控制器有一些我想要注入using属性注入的属性。
我的控制器注册看起来像这样
builder.RegisterControllers(Assembly.GetExecutingAssembly()
我不知道如何访问基类并注入属性。
答案 0 :(得分:8)
这应该有效:
builder.RegisterControllers(typeof(MvcApplication).Assembly).PropertiesAutowired();
autofac网站上的更多信息:http://code.google.com/p/autofac/wiki/PropertyInjection
答案 1 :(得分:5)
您可能需要考虑使用Autofac Aggregate Service:
当您需要将一组依赖项视为一个依赖项时,聚合服务很有用。当一个类依赖于几个构造函数注入的服务,或者有几个注入属性的服务时,将这些服务移动到一个单独的类中会产生一个更简单的API。
一个例子是超类和子类,其中超类具有一个或多个构造函数注入的依赖项。子类通常必须继承这些依赖项,即使它们可能只对超类有用。使用聚合服务,可以将超类构造函数参数折叠为一个参数,从而减少子类中的重复性。另一个重要的副作用是子类现在与超类依赖项的更改隔离,在超类中引入新的依赖项意味着只更改聚合服务定义。
答案 2 :(得分:3)
这对我有用:
using Autofac;
using Autofac.Integration.Web;
using Autofac.Integration.Web.Mvc;
builder.RegisterType<ExtensibleActionInvoker>().As<IActionInvoker>();
builder.RegisterControllers(Assembly.GetExecutingAssembly()).InjectActionInvoker();
答案 3 :(得分:2)
nickvane的回答是正确的。只需确保
builder.RegisterControllers(typeof(MvcApplication).Assembly).PropertiesAutowired();
是在注册所有依赖项之后。或者换言之,就在您构建容器之前。
所以最终代码看起来像
.
.
.
builder.RegisterControllers(typeof(MvcApplication).Assembly).PropertiesAutowired();
var container = builder.Build();
答案 4 :(得分:1)
还需要调用MVC:
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
对于Web API:
HttpConfiguration config = GlobalConfiguration.Configuration;
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);