Базовый контроллер T4MVC не имеет конструктора по умолчанию

Мой контроллер унаследован от другого контроллера, у которого нет конструктора по умолчанию. T4MVC генерирует следующий конструктор, который предполагает, что базовый контроллер имеет конструктор по умолчанию:

protected MyControllerController(Dummy d) { }

Как я могу решить эту проблему? Достаточно интересно, согласно этой странице, версия 2.4.00 "устранена проблема, когда база контроллер не имеет ctor по умолчанию». Я также нашел этот вопрос SO , но мой базовый контроллер не является универсальным.


person SiberianGuy    schedule 20.07.2012    source источник
comment
Я смог воспроизвести вашу проблему с версией 2.10.0... Я думаю, вам следует опубликовать проблему в системе отслеживания проблем T4MVC, и до тех пор, пока она не будет исправлена, используйте обходной путь из связанного вопроса SO. А именно добавить конструктор по умолчанию в ваш базовый класс.   -  person nemesv    schedule 24.07.2012
comment
Меня нет, но я постараюсь расследовать это ближе к концу недели.   -  person David Ebbo    schedule 24.07.2012


Ответы (1)


Это должно работать нормально, если вы сделаете свой базовый контроллер абстрактным. Я предполагаю, что его никогда не нужно использовать непосредственно в качестве контроллера? Если это так, вы всегда можете создать другой неабстрактный производный класс для обработки этого.

person David Ebbo    schedule 29.07.2012
comment
Да, есть несколько способов обойти это, но я работаю над сценарием (я описал его здесь: stackoverflow.com/questions/11576606/), что выглядит довольно разумно. Было бы неплохо, если бы T4MVC поддерживал это без хаков? - person SiberianGuy; 29.07.2012
comment
Не преследует вас здесь. Вы используете базовый тип напрямую или нет? Если нет, то пометить его как абстрактный - это не хак, это правильно. - person David Ebbo; 29.07.2012
comment
Я использую его напрямую. Я просто передаю ему некоторые конкретные зависимости от производного контроллера. - person SiberianGuy; 29.07.2012
comment
У меня та же проблема, но пометка как абстрактная не решает проблему. Добавление пустого конструктора нарушит внедрение зависимостей, так что это тоже не вариант. - person Nilzor; 04.03.2014
comment
Вы говорите, что создание абстракции не влияет на сгенерированный код? Я ожидаю, что это приведет к созданию ctor по умолчанию в абстрактной базе. Тем не менее, вы описываете добавление ctor по умолчанию как альтернативный вариант, который вы пробовали, так что здесь что-то не сходится. - person David Ebbo; 04.03.2014
comment
-1, поскольку он не работает, если вы делаете базовый конструктор абстрактным: открытый абстрактный класс BaseController: Controller { protected BaseController (регистратор ILogger); } общедоступный частичный класс HomeController: BaseController { public HomeController (регистратор ILogger): base (регистратор) { } public virtual ActionResult Index() { return View(); } } - person Skorunka František; 19.05.2014
comment
Маркировка моего базового контроллера как abstract также не работает для меня. - person DLeh; 29.09.2014