具有MVC 4动作过滤器属性注入的Autofac

mar*_*are 5 asp.net-mvc autofac asp.net-mvc-4

我正在使用Nuget MVC3集成软件包用于Autofac和MVC4.它主要工作(使用Controllers的构造函数注入很好)但它不会将注册服务注入动作过滤器属性.

这是我在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));
Run Code Online (Sandbox Code Playgroud)

然后在SetCultureAttribute我有这个:

public IUserService _userService { get; set; } // it doesn't get injected, null
Run Code Online (Sandbox Code Playgroud)

这也不适用于属性的构造函数:

_userService = DependencyResolver.Current.GetService<AspNetMembershipProviderWrapper>(); // always returns null
Run Code Online (Sandbox Code Playgroud)

DependencyResolver.Current.GetService() 当在动作过滤器的构造函数中调用时,也为所有其他注册服务返回null(我在Debug窗口中尝试了它来测试它).

所以我觉得有些事情不对.是否可以使用MVC3集成或者我应该使用MVC4 Nuget包(它说它是用于RC)?

还有什么我可以尝试使这项工作?

Tra*_*lig 9

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

builder.RegisterFilterProvider();
Run Code Online (Sandbox Code Playgroud)

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

在任何一种情况下,您都将服务注册为IUserService,因此您必须解决该问题.

_userService = DependencyResolver.Current.GetService<IUserService>();
Run Code Online (Sandbox Code Playgroud)

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