2009-11-02 2 views
8

У меня есть несколько контроллеров на работе, которые содержат методы, которые я могу использовать в других контроллерах.Обмен кодом между ASP.NET MVC-контроллерами

Я рассмотрел возможность переноса некоторых общих функций на базовый контроллер, который они могли бы наследовать. Проблема в том, что у меня бы были методы, которые мне нужны в нескольких базовых элементах управления, к которым я не смог бы получить доступ. (Потому что мы не можем наследовать от нескольких базовых контроллеров).

Моя другая идея - переместить общую функциональность в свои собственные классы, вне папки Controller.

Что вы хотите сделать? Есть ли отличный способ в ASP.NET MVC для совместного использования такого кода, о котором я еще не знаю?

ответ

14

Там есть правило об объектно-ориентированном программировании, что вы должны пользу композиции над наследованием, и он очень хорошо вписывается в этот сценарий.

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

Для получения дополнительных баллов извлеките интерфейс из соответствующей службы и введите интерфейс в контроллеры для максимального разделения проблем.

+0

У меня есть несколько иной сценарий. У меня есть несколько веб-приложений, чьи логин-контроллеры имеют точный код_. Различия между системами входа в систему приложений ограничиваются файлами 'web.config'. Я хотел бы иметь общий класс контроллера входа в отдельный проект, на который будут ссылаться мои веб-приложения. Это возможно? – pyon

+0

Да. Я всегда кодирую все мои контроллеры в отдельных библиотеках. –

+0

Ницца. А как насчет взглядов? – pyon

4

Я бы воспользовался вспомогательным классом или чем-то еще. Из того, что вы описали функциональность помогает контроллеров/

1

Возможные варианты выбора: базовый контроллер или вспомогательный класс. Вы можете взять контроль над созданием контроллера и ввести помощника в зависимости от того, какие контроллеры ему нужны.