Могу ли я получить доступ к информации о модели в методе Initialize контроллера? - PullRequest
0 голосов
/ 12 декабря 2011

В моем контроллере я хотел бы настроить следующие службы:

    private IAccountService _accountService;
    private IDataSourceService _dataSourceService;
    private IProductService _productService;
    private ISequenceService _sequenceService;

    protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);
    }

Однако для их настройки необходимо знать значение свойства в модели, которое исходит из представлений, и указать dataSourceID.

В методе Initialize контроллера доступна информация о модели?Если ответ «нет», доступны ли мне переменные сеанса для проверки?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2011

Я не уверен, почему вы захотите это сделать.Контроллер не должен отвечать за настройку своих зависимостей.Вы должны использовать контейнер Inversion of Control (он же Dependency инъекция), чтобы внедрить все зависимости в конструкторе.

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

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

0 голосов
/ 12 декабря 2011

Не взламывайте внутреннюю работу MVC framework. Мне кажется, что вы на самом деле хотите инверсия управления или внедрение зависимостей. Он хорошо поддерживается в MVC, вам просто нужно сделать так, чтобы конструктор вашего контроллера принимал эти сервисы (как интерфейсы) и настраивал контейнер IoC (MVC3 имеет встроенный DependencyResolver, совместимый со всеми основными контейнерами IoC - лично мне нравится Ninject). По этому вопросу есть много уроков, и, например, Ninject может быть полностью настроен с помощью nuget.

...