gpt4 book ai didi

asp.net-mvc - Autofac 与 MVC 4 Action 过滤器属性注入(inject)

转载 作者:行者123 更新时间:2023-12-01 19:22:44 27 4
gpt4 key购买 nike

我正在使用 Autofac 与 MVC4 的 Nuget MVC3 集成包。它大部分都有效( Controller 的构造函数注入(inject)效果很好),但它不会将注册的服务注入(inject)到操作过滤器属性中。

这是我在 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)?

还有什么我可以尝试让这项工作成功吗?

最佳答案

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

builder.RegisterFilterProvider();

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

无论哪种情况,您都将服务注册为 IUserService,因此您必须解决该问题。

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

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

关于asp.net-mvc - Autofac 与 MVC 4 Action 过滤器属性注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12883509/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com