如何使用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;
        }

如何使用Autofac注入asp.net mvc3自定义会员资格提供程序

您不能注入内置的提供程序(成员资格/角色)。您可以将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>();
}