【发布时间】:2014-03-13 01:04:16
【问题描述】:
我将 Nuget MVC3 集成包用于 Autofac 和 MVC4。它主要工作(使用控制器的构造函数注入效果很好),但它不会将注册的服务注入到动作过滤器属性中。
这是我在 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)?
还有什么我可以尝试的吗?
【问题讨论】:
-
在您的示例中,
_userService是一个公共只读 字段,但属性注入(顾名思义)需要属性(例如public IUserService UserService { get; set;})。那么这是您的样本中的错字还是问题的根源? -
你是对的,我更新了代码,但没有任何区别。如果属性注入不起作用并且 DependecyResolver.Current.GetService 起作用但它也不起作用,一切都会好起来的。
标签: asp.net-mvc asp.net-mvc-4 autofac