Сессия RavenDB для запроса с MVC3 и Ninject с использованием модели хранилища - PullRequest
6 голосов
/ 19 июня 2011

Я ищу несколько советов о правильном механизме использования RavenDB IDocumentSession в моих репозиториях в истинном поведении session-pr-request.

Это новое приложение MVC3, и я получил Ninject / Ninject.MVC3, используя NuGet. RavenDB работает на внешнем сервере (т.е. не встроен).

Я настроил модуль Ninject для возврата правильных репозиториев, а также сеанса для каждого запроса для них.

Однако - правда ли, что MVC3 будет создавать экземпляр контроллера для каждого метода действия? В этом случае я могу просто позволить MVC3 / Ninject вводить мои репозитории и сеансы, в которых они нуждаются, без проблем.

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

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

Должен ли мой репозиторий иметь свойство Session, которое он использует, которое фактически каждый раз получает текущий сеанс из контейнера? Это добавило бы связь между реализацией репозитория и контейнером IoC, но, в противном случае, должно работать.

Как правильно это сделать? Как классные дети делают это? Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

12 голосов
/ 19 июня 2011

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

3 голосов
/ 16 апреля 2012

Я написал исчерпывающее сообщение в блоге об использовании Ninject InRequestScope, так что IDocumentSession вводится один раз за запрос. Ninject отлично справляется с задачей.

http://www.dalsoft.co.uk/blog/index.php/2012/04/12/mvc-get-ravendb-up-and-running-in-5-minutes-using-ninject/

0 голосов
/ 19 июня 2011

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

Это может помочь когда-нибудь: Если состояние сеанса отключено, мы больше не должны пытаться использовать свойство сеанса на контроллере, поскольку оно будет нулевым. Отключение состояния сеанса и использование свойства сеанса приведет к страшной ошибке «ссылка на объект не установлен как экземпляр объекта».

...