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

时间:2012-02-21 13:48:33

标签: c# asp.net-mvc asp.net-mvc-3 autofac

我有一个使用Autofac和自定义会员提供商的MVC3应用程序。

如果我尝试使用ctor注入提供程序,我会收到一个错误:'没有为此对象定义无参数构造函数。'

public class MyMemberShipProvider : MembershipProvider
    {

        IUserRepository userRepository;

  public MyMemberShipProvider(IUserRepository userRepository)
        {
            this.userRepository = userRepository;

        }

3 个答案:

答案 0 :(得分:8)

您无法注入内置提供程序(成员资格/角色)。 您可以将MVC 3 DependencyResolver与Autofac一起使用。

一个简单的例子......

public override bool ValidateUser(string username, string password)
{
    var userRepo = DependencyResolver.Current.GetService<IUserRepository>();
    return userRepo.ValidateUser(username, password);
}

答案 1 :(得分:1)

避免在应用程序代码中解析(验证用户等),因为这是服务定位器反模式。您只想在“胶水”代码/低级代码中解决。

以下是针对windsor的,但可以轻松调整实施方案。这是一个针对城堡温莎的概述,但实施应该是类似的。它有点干净,因为这在GetProvider调用中解决 - 这里是'粘合'代码,因此避免了实际成员函数中的服务定位器反模式使用(例如ValidateUser)

http://bugsquash.blogspot.com/2010/11/windsor-managed-membershipproviders.html

答案 2 :(得分:-1)

这是因为你也应该注入你的userRepository。类似的东西:

protected override void Load(ContainerBuilder builder)
{
    builder.RegisterType<UserRepository>().As<IUserReposotory>();
    builder.RegisterType<MyMembershipProvider>();
}