如何使用Autofac注入asp.net mvc3自定义会员资格提供程序
本文关键字:程序 自定义 Autofac 何使用 注入 asp mvc3 net | 更新日期: 2023-09-27 18:25:30
我有一个使用Autofac的MVC3应用程序和一个自定义会员资格提供商。
如果我尝试使用ctor注入提供程序,我会得到一个错误:"没有为此对象定义无参数构造函数。"
public class MyMemberShipProvider : MembershipProvider
{
IUserRepository userRepository;
public MyMemberShipProvider(IUserRepository userRepository)
{
this.userRepository = userRepository;
}
您不能注入内置的提供程序(成员资格/角色)。您可以将MVC 3 DependencyResolver与Autofac一起使用。
举个简单的例子。。。
public override bool ValidateUser(string username, string password)
{
var userRepo = DependencyResolver.Current.GetService<IUserRepository>();
return userRepo.ValidateUser(username, password);
}
避免在应用程序代码中解析(验证用户等),因为这是服务定位器反模式。您只想在"粘合"代码/低级别代码中进行解析。
以下内容适用于windsor,但实施方式可以轻松调整。以下是城堡温莎的概述,但实施方式应该类似。它有点干净,因为它在对GetProvider的调用中解决了这一问题,GetProvider是这里的"粘合"代码,从而避免了在实际成员身份函数(如ValidateUser)中使用服务定位器反模式
http://bugsquash.blogspot.com/2010/11/windsor-managed-membershipproviders.html
这是因为您也应该注入您的userRepository。类似于:
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<UserRepository>().As<IUserReposotory>();
builder.RegisterType<MyMembershipProvider>();
}