Неправильно ли использовать Service Locator для предоставления экземпляра контейнера для Service? - PullRequest
1 голос
/ 15 мая 2011

Я использую сервисный слой, поэтому у меня много сервисов, таких как:

  • UserService
  • ArticleService
  • CommentService
  • AuthorizationService

Иногда мне нужно использовать Службу из другой Службы.

В настоящее время я использую sfServiceContainer для внедрения зависимостей и внедряю свой Doctrine 2 Entity Manager в некоторые изоднако, мой сервис, я думаю переключить и внедрить экземпляр контейнера, чтобы иметь возможность получить любой сервис и EntityManager.

Но я застрял и не уверен, что это хорошая идея.

1 Ответ

0 голосов
/ 08 июля 2011

Можно использовать Service Locator, если ваш контейнер не предоставляет вам лучший способ сделать это.

Если вы используете контейнер, такой как Ding (http://marcelog.github.com/Ding),, ваши сервисы будут bean-компонентами, а вместо этогоимея локатор службы, вы можете реализовать интерфейс IContainerAware в этих службах.

Контейнер будет затем внедряться при каждом создании этих bean-компонентов, и затем вы можете $ this-> getBean ('aService') напрямую извнутри этих сервисов / бинов. В случае с Ding есть даже пример интеграции Doctrine2 (включая внедрение EntityManager)

...