如何使Account和Manage控制器从BaseController继承而没有错误

时间:2019-05-09 10:59:42

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

我已经创建了一个自定义控制器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)

    }

感谢任何愿意帮助我的人,如果我在措辞上有误,我深感抱歉。

1 个答案:

答案 0 :(得分:0)

使用Thangaduraicomments中的建议进行了修复:

  

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

中包含一个默认构造函数