Стратегии организации зависимостей / контейнеров IOC в приложении MVC3 .Net с Castle Windsor - PullRequest
2 голосов
/ 02 сентября 2011

Итак, я новичок в использовании Castle Windsor и борюсь с тем, насколько уродливыми становятся мои контроллеры. У меня есть МОК, работающий над моим проектом, который, по-видимому, составляет как минимум половину проблемы для большинства людей. Теперь я обнаружил, что объявляю тонну зависимостей в конструкторах моего контроллера, как показано ниже. Есть ли хорошие шаблоны для управления ими, поэтому я не копирую / вставляю это в каждый новый контроллер и / или раздел сайта, который я создаю?

public HomeController(ILocalizationService localizationService,  // ugly
            INewsService newService, 
            IAnswerService answerService,
            ITwitterFeedService twitterService,
            IFacebookService facebookService,
            ISettingsService settingsService,
            IExternalDataService externalDataService,
            IUserService userService,
            IInstantMessageService instantMessageService,
            ICalendarService calendarService,
            ILogger logger)
        {
// do some stuff to link these up
}

Надеюсь, это имеет смысл. Я могу добавить больше деталей, если необходимо уточнить.

Ответы [ 2 ]

1 голос
/ 02 сентября 2011

Кажется, у вас есть ряд служб, которые в основном делают подобные вещи, такие как Facebook и Twitter.Почему бы не создать ISharingService, который обрабатывает все ваши социальные сети в одном интерфейсе?

Тогда у вас есть IUserService, который я считаю репозиторием какого-либо типа?Если это так, вы могли бы лучше использовать шаблон «Единица работы», который объединит все хранилища данных в один интерфейс.

1 голос
/ 02 сентября 2011

Кажется, что ваши контроллеры делают слишком много. Постарайтесь сделать контроллеры более специализированными, поэтому, за исключением действительно распространенных вещей, таких как ILogger, им не нужно слишком много зависимостей.

Просмотрите методы действий на контроллерах и посмотрите, какие из них имеют похожее поведение и зависимости - они являются кандидатами для перехода на свой собственный контроллер.

...