将存储库带入AccountController

时间:2014-07-04 20:58:55

标签: c# asp.net-mvc

我是MVC和C#的新手,我遇到了这个错误。我不知道如何纠正它。 任何帮助,将不胜感激。

我试图将客户存储库带入AccountController,以便在创建用户时可以从注册用户视图的下拉列表中将其与客户关联。

我在控制器的这一行收到错误。

public AccountController()
        : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
    {
    }

错误是:帐户控制器不包含带有1个参数的构造函数 我已经尝试过多次更正并被卡住了。

    public AccountController(UserManager<ApplicationUser> userManager, ICustomerRepository customerRepository)
    {
        UserManager = userManager;
        customerrepository = customerRepository;
    }

由于

3 个答案:

答案 0 :(得分:1)

AccountController中有2个构造函数。

第一个叫第二个。

第二个参数需要2个参数:UserManager<ApplicationUser>ICustomerRepository

这是错误的,因为你只是从第一个传递到第二个。

您需要将另一个参数传递给第二个构造函数。

即。猜你打算做这样的事情:

public AccountController()
    : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())),
           new CustomerRepository())
{
}

答案 1 :(得分:0)

看起来你只有一个构造函数:

public AccountController
{
    UserManager<ApplicationUser> _manager ;

    public AccountController()
    {
        this._manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
    }

}

只有在有多个构造函数且您不想在构造函数之间复制代码时,才应使用: this(xxx)

public AccountController
{
    UserManager<ApplicationUser> _manager ;

    public AccountController()
        :this(new ApplicationDbContext()) //calls the other constructor with a default context
    {
    }

    public AccountController(ApplicationDbContext context)
    {
        this._manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context);
    }

}

答案 2 :(得分:0)

看起来您需要在AccountController构造函数中为customerRepository参数提供参数。

在控制器中创建属性可能是一个更好的解决方案,如果它们未在构造函数中提供,则可以生成这些属性:

  • 从OwinContext获取用户管理器,
  • 创建CustomerRepository的新实例

以下是用户管理器的示例:

private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager {
    get {
        return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
    }
    private set {
        _userManager = value;
    }
}