5

我正在使用带有 MVC4 的 Autofac 的 Nuget MVC3 集成包。它主要工作(使用控制器的构造函数注入效果很好)但它不会将注册的服务注入到动作过滤器属性中。

这是我在 Global.asax.cs 中的注册:

builder.RegisterType<AspNetMembershipProviderWrapper>().As(typeof(IUserService)).InstancePerHttpRequest();
// 5) action filters
builder.RegisterType<SetCultureAttribute>().As<IActionFilter>().PropertiesAutowired().SingleInstance();
builder.RegisterFilterProvider();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

然后在SetCultureAttribute我有这个:

public IUserService _userService { get; set; } // it doesn't get injected, null

这在属性的构造函数中也不起作用:

_userService = DependencyResolver.Current.GetService<AspNetMembershipProviderWrapper>(); // always returns null

DependencyResolver.Current.GetService()在操作过滤器的构造函数中调用时,所有其他注册服务也返回 null(我在调试窗口中对其进行了测试以对其进行测试)。

所以我猜有些事情不正常。可以使用 MVC3 集成还是应该使用 MVC4 Nuget 包(它说它是用于 RC)?

还有什么我可以尝试做的吗?

4

1 回答 1

9

为了使 ActionFilter 注入工作,您需要注册提供程序,我在您的示例中没有看到:

builder.RegisterFilterProvider();

这里有文档: http ://code.google.com/p/autofac/wiki/MvcIntegration3

无论哪种情况,您都将服务注册为 IUserService,因此您必须这样解决它。

_userService = DependencyResolver.Current.GetService<IUserService>();

您不需要注册该属性。查看上面的 wiki 链接了解更多信息。

于 2012-10-15T00:13:26.250 回答