Castle Windsor Component Советы по образу жизни - PullRequest
1 голос
/ 13 февраля 2012

Я ищу несколько советов о том, как лучше всего настроить эту ситуацию. У меня есть следующие компоненты в приложении ASP MVC.

  • Контроллеры - переходные по требованию MVC
  • Сервисы - контроллеры вызывают их, чтобы попасть на бизнес-уровень
  • Валидаторы - Сервисы используют их для проверки компонентов. Их дорого создавать, поэтому мне нужно, чтобы они были Singleton
  • Хранилища - службы и валидаторы используют их для доступа к данным
  • ISession - NHibernate Session, настроенный как PerWebRequest

Я смотрю, как лучше настроить службы и репозитории. На первый взгляд кажется, что они могут быть настроены одинаково. Единственная зависимость репозитория (переданная конструктору) - это ISession. Только сервисные зависимости (переданные в конструкторе) являются репозиториями. Когда сервису требуется валидатор, он получает его от ServiceLocator. Валидаторы получают репозитории в конструкторе. Я думаю, что из-за того, что валидаторы являются синглтон-транзитными транзитными репозиториями, проблематично, потому что валидатор будет удерживать репозиторий с удаленной ISession.

Любая помощь здесь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

Любой репозиторий, использующий UnitOfWork (ORM, пользовательская реализация ...), должен быть временным или, по крайней мере, таким же образом жизни UoW.

В случае, если вашему Validator требуется доступ «только для чтения» кхранилище через репозиторий ... вы можете подумать, что у вас есть репозиторий Singleton, но будьте очень осторожны с его реализацией

0 голосов
/ 14 февраля 2012
  • Сеанс PerWebRequest
  • Репозитории в зависимости от использования ISessionProvider (может быть одноэлементным), если они внедряются в сеанс, они привязаны к времени жизни сеанса, поэтому PerWebRequest
  • Валидаторы: дорого создавать ???? хорошо, если им нужен репо или сеанс, то же самое применимо и здесь, как и к самим репо
  • сервисы: возможно, может быть и за веб-запрос
...