Я предполагаю, PageType
является примером класса стратегии.В этом случае вы можете внедрить зависимости с помощью page.service
, и вам не нужно будет определять стратегии как сервисы.
Каждая стратегия, вероятно, зависит от разных объектов, и поэтому, я думаю, вы могли бы сделать их ContainerAware
.Вот пример, как это сделать
// This is the page.service class
class MyPageService {
public function render(PageTypeInterface $page_type) {
$page_type->setContainer($this->container);
// do stuff
}
}
// This is the type strategy
class MyStrategyType extends ContainerAware implements PageTypeInterface {
// you can access the container after MyPageService has injected it.
}
Таким образом, каждая стратегия будет расширяться ContainerAware
, а page.service
будет вводить контейнер.
РЕДАКТИРОВАТЬ
Если все ваши стратегии зависят от одних и тех же сервисов, я бы внедрил их вместо всего контейнера.
class MyPageService {
public function render(PageTypeInterface $page_type) {
$page_type->setService($this->container->get('my_service'));
// do stuff
}
}