Как заставить учетные записи и управлять контроллерами наследовать от BaseController без ошибок - PullRequest
0 голосов
/ 09 мая 2019

Я создал собственный контроллер BaseController и заставляю все мои контроллеры наследовать от него.

Этот контроллер полезен для изменения цвета заголовка, добавления пользовательских текстов, логотипов и т. Д., И мне бы очень хотелось, чтобы мой контроллер Manage и Account тоже наследовал его, чтобы мое веб-приложение имело одинаковый «стиль» на каждой странице .

Проблема в том, что контроллеры Account и Manage не могут наследоваться от BaseController, поскольку у них уже есть два конструктора, один пустой и один с параметрами ApplicationUserManager и ApplicationSignInManager.

Если я пытаюсь наследовать от BaseController, это дает мне ошибки в этих двух конструкторах, говоря, что у них нет необходимых формальных параметров, которые я должен передать из BaseController.

Не указан аргумент, соответствующий необходимому формальному параметру (1stParam) BaseController.BaseController (Type1stParam, Type2ndParam, Type3rdParam, Type4thParam)

Я некоторое время искал в 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 голосов
/ 10 июня 2019

Исправлено с помощью предложения Тангадурай в комментариях :

В вашем BaseController у вас нет конструктора по умолчанию, который не принимает никаких параметров. Итак, во всех ваших конструкторах AccountController вы должны вызывать базовый конструктор так же, как вы это делали для первого конструктора, ИЛИ вы должны включить один базовый конструктор в базовый класс

...