首页 > 解决方案 > 如何使 Account 和 Manage 控制器从 BaseController 继承而不会出现错误

问题描述

我已经制作了一个名为 BaseController 的自定义控制器,并且我正在让我的所有控制器都继承自那个控制器。

这个控制器对于更改标题颜色、添加自定义文本、徽标等很有用,我真的很想让我的管理和帐户控制器也从它继承,以使我的 Web 应用程序在每个页面中都具有相同的“样式”。

问题是 Account 和 Manage 控制器不能从 BaseController 继承,因为它们已经有两个构造函数,一个是空的,一个带有参数 ApplicationUserManager 和 ApplicationSignInManager。

如果我尝试从 BaseController 继承,它会给我这两个构造函数的错误,说它们没有我应该从 BaseController 传递的所需形式参数。

没有给出对应于 BaseController.BaseController(Type1stParam, Type2ndParam, Type3rdParam, Type4thParam) 所需形式参数 (1stParam) 的参数

我在 StackOverflow 上搜索了一段时间以找到答案,但找不到太多,所以我决定创建这个问题。

这是自定义控制器。

public abstract class BaseController : Controller
    {
        readonly Servix2Repo.IUtente Utente;
        readonly Servix2Repo.IMenu Menu;
        readonly Servix2Repo.IAzienda Azienda;
        readonly ServixMVCModel _context;

        public BaseController(ServixMVCModel context, Servix2Repo.IUtente utenteRepo, Servix2Repo.IMenu menuRepo, Servix2Repo.IAzienda aziendaRepo)
        {
            _context = context;
            this.Utente = utenteRepo;
            this.Menu = menuRepo;
            this.Azienda = aziendaRepo;
        }

        (Other methods)

    }

这是我遇到问题的两个控制器之一。我在空构造函数和最后一个构造函数上得到错误。

public class AccountController : BaseController
    { 

        private ApplicationSignInManager _signInManager;
        private ApplicationUserManager _userManager;

        public AccountController(ServixMVCModel context, Servix2Repo.IUtente utenteRepo, Servix2Repo.IMenu menuRepo, Servix2Repo.IAzienda aziendaRepo) : base(context, utenteRepo, menuRepo, aziendaRepo)
        {
        }

        public AccountController()
        {
        }

        public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager )
        {
            UserManager = userManager;
            SignInManager = signInManager;
        }

        (Other methods)

    }

感谢任何愿意帮助我的人,如果我犯了一些措辞错误,我很抱歉。

标签: c#inheritanceasp.net-mvc-5asp.net-identity

解决方案


修复了在评论中使用Thangadurai的建议:

在您的 BaseController 中,您没有任何不接受任何参数的默认构造函数。因此,在所有 AccountController 构造函数中,您应该以与第一个构造函数相同的方式调用基构造函数,或者您必须在基类中包含一个默认构造函数


推荐阅读